【问题标题】:How do I customize URL in Yii2?Yii2中如何自定义URL?
【发布时间】:2016-10-13 01:53:13
【问题描述】:

我是 Yii2 的新手,所以我有 Brands 表,其中包含它们的类型 ('brand', 'author', 'company') 和它们的 slug 名称,所以我需要像 www.site.com/{brand_type}/{brand_slug} 这样没有控制器名称的 URL,那么该怎么做?

【问题讨论】:

    标签: php yii2


    【解决方案1】:

    这通常称为漂亮的 URL。要在 Yii2 中实现这一点,请将其放在您的应用程序配置文件中 'components' 键下

    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            // ...
            '<type:\w+>/slug:\w+>' => 'yourcontroller/youraction',
            // ...
        ],
    ],
    

    结果是,当您以您指定的格式传递 URL 时,您的控制器将 $type$slug 作为您可以在控制器中使用的参数,预计采用以下形式:

    class YourcontrollerController extends YourBaseController
    {
        ...
        public function actionYouraction($type, $slug)
        {
            // Do whatever you want with these variables
        }
        ...
    }
    

    请注意,您将需要您的网络服务器来配置执行应用程序的index.php,即使它不在 URL 中。例如,对于 Apache,可以使用 .httaccess (More details here)

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php
    

    The Definitive Guide to Yii 2.0 有一个关于这个主题的精彩部分

    【讨论】:

    • 根据您的回答,我们需要为每个 slug 添加规则吗?
    • 不,$slug 变量和 $type 变量将可供控制器执行任何您想做的事情
    • 感谢您的回复。抱歉,这让我感到困惑。如果您不介意,请使用控制器方法更新您的答案。
    • 更新了答案
    • 感谢您更新您的答案。例如,在我的表中,我有多个品牌,如 Apple、Micorsoft、Google 等。所以对于每个品牌,我必须创建单独的方法,我正确吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多