模块和参数的Yii2 url规则

时间:2016-01-21 15:33:59

标签: php url-rewriting yii2

我正在尝试以如下方式配置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>'
            ],
        ],

管理员工作正常,这是我的第一个模块,因此已经提到了其他规则

2 个答案:

答案 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>',

            ],