【问题标题】:Yii2 Nav widget doesnt support routes with baseUrlYii2 Nav 小部件不支持带有 baseUrl 的路由
【发布时间】:2017-09-21 14:22:21
【问题描述】:

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->request->Nav 小部件的路径信息

尝试 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 - 使用大括号作为路线 未找到活动元素

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'],
        ]);

所以你应该注意到我必须使用脏 hack 来强制 Nav 使用生成的 Url,这似乎很不方便。

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

【问题讨论】:

    标签: yii yii2


    【解决方案1】:

    如果你想根据你的参数构建一个 url,你应该使用Url::to()as

    '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 来管理不同的配置

    【讨论】:

    • 这种方法也不行,试过了,'url' => [Url::to(['', 'id' => $userType->id])],也试过' url' => [Url::to(['usertype-activitytype/type', 'id' => $userType->id])],似乎 Nav 小部件试图仅比较路线部分并忽略 baseUrl
    • 你有错误吗? ..“不工作”是什么意思? url::to() 提供的结果是什么以及您期望的结果是什么? ...我不清楚你的目标
    • 如果您设置了 baseUrl 并且通过 URL::to 形成了 url,则导航小部件无法识别活动项目
    • 你试过 var_dump(Url::to('usertype-activitytype/type', ['id' => $userType->id])) 看看真实结果吗??跨度>
    • 当然,生成的链接看起来像 /Yii/settings/usertype-activitytype/type/2,并且由于 Yii/ 部分 Nav 小部件无法识别活动元素,因此我曾经破解 str_replace 。看起来很脏如果我手动放一个没有 Yii/ 部分的字符串,它可以工作,如果我添加 Yii/ 部分,它就不能工作。
    猜你喜欢
    • 2015-07-22
    • 2016-08-29
    • 1970-01-01
    • 2020-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多