Правило для urlManager

159
18 марта 2018, 22:09

Необходимо сделать так, чтобы при url вида /catalog загружалась одна модель, при /catalog?id=1 уже другая модель, а при /catalog?id=1&show=1 эта же модель, но с другой вьюшкой

Контроллер получается такой `

public function actionIndex()
{
    $catalogs = CatalogCat::find()->all();
    return $this->render('index', compact('catalogs'));
}
public function actionProduct($id)
{
    $catalogs = Catalog::find()->where(['category_id' => $id])->all();
    return $this->render('product', compact('catalogs'));
}
public function actionShow($id, $show)
{
    $catalogs = Catalog::find()->where(['id' => $show])->one();
    return $this->render('show', compact('catalogs'));
}

Такое правило, не загружает другую вьюшку 'catalog?id=<id:\d+>'=>'catalog/product', только если так загружается другая вьюшка 'catalog/product?id=<id:\d+>'=>'catalog/product',

Answer 1

Добрый день. Попробуйте так

'work/<id:\d+>'=>'work/view',

Это при условии, что "work" не является модулем и сработает это правило только для контроллера WorkController.

p.s. Подождите, если Вам надо получить url в виде /work?id=1, то зачем Вам настраивать UrlManager? Просто отключите его и всё.

p.s.s. Вам в правилах надо всё равно указывать действия, к каким именно надо обращаться в данном контроллере.Хотя изначально Вы говорили о "work", теперь о "catalog"...

'catalog' => 'catalog/index',
'catalog/<_a:[\w\-]+>' => 'catalog/<_a>'

Эти правила будут вести на действия index, product, show. Без подобных правил Ваш urlManager не поймёт, в какие действия передавать параметры. Теперь, если Вы сформируете ссылку в таком формате

Html::a('Link name', ['catalog/product', 'id' => 1]);

то должны будете попасть в действие "product" и передать туда параметр "id"

catalog/product?id=1

Для действия "show" ссылка может выглядеть так

Html::a('Link name', ['catalog/show', 'id' => 1, 'show' => 2])

получить должны в итоге

catalog/show?id=1&show=2

Ну вот как-то так. Без указания действия в правилах ничего не получится.

READ ALSO
Округление в запросе [требует правки]

Округление в запросе [требует правки]

ЗдравствуйтеВозникает ошибка при выполнение некоторых запросов с большими числами

175
Как передать значение переменной из Bash в PHP?

Как передать значение переменной из Bash в PHP?

Есть PHP-скрипт, который вызывает системные команды; в нём нужно обработать некоторые данные, которые должен ввести пользовательПример на Bash:

170
htacess - переадресация виртуальных ссылок с отловом гет параметров

htacess - переадресация виртуальных ссылок с отловом гет параметров

Приветствую друзьяЕсть одностраничный сайт, где единственная страница index

143
Laravel oAuth 2.0 Логика

Laravel oAuth 2.0 Логика

Добрый деньПодскажите, пожалуйста, а то я немного запутался

136