Yii2 Nav小部件不支持使用baseUrl的路由

时间:2017-09-21 14:22:21

标签: yii yii2

1)我的Yii2在 subfilder 中,所以我的所有链接都从Yii /开始,如 http:/ localhost / Yii / settings / usertype-activitytype / type / 3

2)请求组件配置

'request' => [
    'cookieValidationKey' => 'somecookiekey',
    'baseUrl' => '/Yii',
],

3)尝试构建菜单,当前路由是 http:/ localhost / Yii / settings / usertype-activitytype / type / 1 1是路由中的id,我应该指定当前路由为Yii :: $ app->请求 - >导航窗口小部件的路径信息

尝试1 - 没有支撑作为字符串 找不到活动元素

Nav::widget([
            'items' => array_map(function($userType) {
                return [
                    'label' => $userType->name,
                    'url'   => Url::current(['id' => $userType->id]),
                ];
            }, $userTypes),
            'route' => Yii::$app->request->pathInfo,
            'options' => ['class' =>'nav-pills'],
        ]);

尝试2 - 使用支撑作为路线 NOT FIND ACTIVE ELEMENT

Nav::widget([
            'items' => array_map(function($userType) {
                return [
                    'label' => $userType->name,
                    'url'   => [Url::current(['id' => $userType->id])]
                ];
            }, $userTypes),
            'route' => Yii::$app->request->pathInfo,
            'options' => ['class' =>'nav-pills'],
        ]);

尝试3 - 从生成的路线中移除baseUrl 找到活动元素!!!

Nav::widget([
            'items' => array_map(function($userType) {
                return [
                    'label' => $userType->name,
                    'url'   => [str_replace('Yii/', '', Url::current(['id' => $userType->id]))]
                ];
            }, $userTypes),
            'route' => Yii::$app->request->pathInfo,
            'options' => ['class' =>'nav-pills'],
        ]);

所以你应该注意到我必须使用脏黑客来强制Nav使用生成的Url ,这看起来非常不合适。

问题是 - 是否有办法强制NAV小部件识别当前活动项

1 个答案:

答案 0 :(得分:0)

如果您希望根据您的参数构建网址,则应使用Url::to()作为

'url'   => Url::to(your-controller/your-view', ['id' => $userType->id]),

所以访问控制器type

的视图usertype-activitytype
 'url'   => Url::to('usertype-activitytype/type', ['id' => $userType->id]),

current使用当前路由和GET参数创建URL。

并记住

  

按设计UrlManager始终将基本URL添加到生成的URL中。   默认情况下,基本URL是根据条目的位置确定的   脚本。如果要自定义此选项,则应配置   UrlManager的baseUrl属性。

期待您的评论,网址形成正确..那么如果您需要http:/ localhost / Yii而不是Yii,那么您可以:

  • 不设置localhost ... url是自动创建的
  • 或者在config / main中添加正确的基本URL配置为http:/ localhost / Yii /并记住您可以使用main.php和main-local.php来管理不同的配置