我正在尝试以如下方式配置Yii2 url管理器:如果在url中跳过控制器名称,它应该调用默认控制器以进行操作。我已经成功实现了这个没有动作参数。但是在行动名称中使用参数时卡住了。
这是我的路线配置:
return [
'catalog/category/<alias:[\w-]+>' => 'catalog/default/category',
'catalog/<action:\w+>' => 'catalog/default/<action>',
];
控制器文件:
namespace app\modules\catalog\controllers;
use yii\base\Controller;
use app\modules\catalog\models\Categories;
class DefaultController extends Controller
{
public function actionShopbydepartment()
{
$data['categories'] = Categories::findParentSubHierarchy();
return $this->renderPartial('shopbydepartment', $data);
}
public function actionCategory($alias = null)
{
die(var_dump($alias));
$data['category'] = Categories::findCategoryBySlug($alias);
return $this->render('category', $data);
}
}
当我访问以下网址时,它会完全加载。 http://domain.com/index.php/catalog/shopbydepartment
但是当我访问下面的url时,它调用了正确的函数但没有传递$ alias值: http://domain.com/index.php/catalog/category/appliances
更新
我使用以下方法进行模块智能url规则声明: https://stackoverflow.com/a/27959286/1232366
以下是我在主配置文件中的内容:
'rules' => [
[
'pattern' => 'admin/<controller:\w+>/<action:[\w-]+>/<id:\d+>',
'route' => 'admin/<controller>/<action>'
],
[
'pattern' => 'admin/<module:\w+>/<controller:\w+>/<action:[\w-]+>/<id:\d+>',
'route' => 'admin/<module>/<controller>/<action>'
],
],
管理员工作正常,这是我的第一个模块,因此已经提到了其他规则
答案 0 :(得分:0)
只是为了帮助其他人我使用以下方法检索$ alias的值:
$alias = \Yii::$app->request->get('alias');
但绝对不是这个问题的准确答案。我仍然不知道我做错了什么,我没有使用所提到的方法获得价值。
答案 1 :(得分:0)
它不可能! [
'name' => 'lang_country_seller_catalog',
'pattern' => '<lang:\w+>-<country:\w+>/seller/catalog/<module>/<controller>/<action>',
'route' => 'seller/catalog/<module>/<controller>/<action>',
],
[
'name' => 'lang_country_seller_catalog_attributes',
'pattern' => '<lang:\w+>-<country:\w+>/seller/catalog/attributes/<module>',
'route' => 'seller/catalog/attributes/<module>',
],