Я приведу пример, и я надеюсь, что вы увидите из него пример того, как заставить его работать в вашем конкретном случае.
Допустим, вы хотите реализовать простой поиск.Есть ваша поисковая форма, вы отправляете параметры для действия на SearchController::actionIndex()
.Здесь вы можете обработать ваши параметры, что было отправлено на него.
public function actionIndex()
{
$searchForm = new SearchForm();
if (Yii::$app->request->post()) {
$searchForm->load(Yii::$app->request->post());
$productType = $searchForm->productType;
$productName = $searchForm->productName;
$searchAttributes = $searchForm->attributes;
unset($searchAttributes['productName']); //unset what you want to be a nicely formatted part of the url, like domain.eu/productType/productName
unset($searchAttributes['productType']);
foreach ($searchAttributes as $key => $value) {
if (empty($value)) {
unset($searchAttributes[$key]);
}
}
$this->redirect(
array_merge(
['/search/list', 'type' => $producType, 'name' => $productName,
$searchAttributes //this variable will contain all other parameters as regualer get parameters
)
);
}
После этого установите свои правила url в файле конфигурации url-manager следующим образом:
return [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false,
'rules' => [
[
// /productType/productName
'pattern' => '<type>/<name>',
'route' => 'search/list',
'encodeParams' => false,
'defaults' => ['type' => null, 'name' => null],
],
//add other rules as you need
]
Таким образом, если ваше приложение распознает правило, оно его проанализирует иотправьте запрос по нужному маршруту.
Вам потребуется другое действие в вашем SearchController:
public function actionList($type = null, $name = null) {
//do the search or anything you want to do here
$get = Yii::$app->request->get();
var_dump($get);
var_dump($type);
var_dump($name);
}