首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在yii2中隐藏控制器名称和操作名

如何在yii2中隐藏控制器名称和操作名
EN

Stack Overflow用户
提问于 2015-08-05 05:12:17
回答 2查看 1.4K关注 0票数 2

有人能建议我如何在yii2中对url隐藏控制器和动作名吗?我试着写一些规则,但没有起作用。这是我的锚牌:

代码语言:javascript
复制
 <?php echo Html::a($model->title, ['category/view/', 'type' => $model->category->urlValue,'parameter' => $model->urlValue]); ?>

我现在的网址是这样的:

代码语言:javascript
复制
http://localhost/project/category/view/news-and-events/dosarrest-strong-performer-in-2015-forrester-wave-for-ddos-service-providers-1

但我想要这样:

代码语言:javascript
复制
http://localhost/project/news-and-events/dosarrest-strong-performer-in-2015-forrester-wave-for-ddos-service-providers-1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-06 05:22:12

最后,它通过在main.php文件中编写规则来工作,如下所示:

代码语言:javascript
复制
'<type:[A-Za-z0-9-]+>/<param:[A-Za-z0-9 -_.]+>' => 'category/view',
票数 3
EN

Stack Overflow用户

发布于 2015-08-05 14:57:07

YOu会创建您自己的UrlRule。类似于:

代码语言:javascript
复制
class CustomUrlRule extends Object implements UrlRuleInterface {
    public function createUrl($manager, $route, $params)
    {
        $parts = explode('/', $r);
        if ($route === 'category/view' 
            && isset($params['type'])
            && isset($params['parameter'])
        ) {
            $url = generate some url;
            unset($params['view'], $params['parameter']);
            if (count($params)) {
                $url .= '?' . http_build_query($params);
            }

            return $url;
        }

        return false; 
    }
    public function parseRequest($manager, $request)
    {
        //parse request url and return true if it's url for category/view 
    }
}

别忘了在配置中添加

代码语言:javascript
复制
config/web.php:
...
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        [
        'class' => 'app\components\CustomUrlRule',
        ],
    ...
    ],
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31823910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档