【问题标题】:Yii2 if only id parameter is provided redirect to id plus slugYii2 如果只提供 id 参数重定向到 id 加 slug
【发布时间】:2015-08-11 15:51:34
【问题描述】:

我当前的设置具有以下 URL 结构

http://somedomain/blog/1/title

如果 slug 标题部分错误,它将重定向到正确的 slug,但是如果您输入以下 url,您将得到 404(未提供 slug):

http://somedomain/blog/1

现在我想使用 slug 将用户重定向到正确的 URL,例如在 stackoverflow 上,如果您输入 https://stackoverflow.com/users/1917403 是否会将我的用户名添加到末尾。

网址管理器

    'urlManager' => [
        'class' => 'yii\web\UrlManager',
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            'blog/<id:\d+>/<slug:[-a-zA-Z 0-9]+>' => 'blog/view',
        ],
    ],

这是我的控制器视图操作

public function actionView($id, $slug = null)
{

    $model = $this->findModel($id);
    $model->author_info = json_decode($model->author_info, true); 

    if ($slug != $model->slug) {
        return $this->redirect(['blog/view', 'id' => $id, 'slug' => $model->slug]);
    }

    return $this->render('view', [
        'model' => $model,
    ]);

}

【问题讨论】:

    标签: php redirect yii2 yii2-advanced-app


    【解决方案1】:

    您创建的规则不匹配,因为未找到 slug。它会简单地绕过它。

    因此,您可以使用 defaults-functionality 作为规则使其中一个参数(在本例中为 slug)可选,或者只指定第二个不带 slug 部分的规则。

    解决方案 1 的示例是:

    'urlManager' => [
        'class' => 'yii\web\UrlManager',
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [ 
            [
               'pattern' => 'blog/<id:\d+>/<slug:[-a-zA-Z 0-9]+>',
               'route' => 'blog/view',
               'defaults' => ['slug' => null],
            ],            
        ],
    ],
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 2016-01-10
      • 2013-02-05
      • 2021-04-25
      • 2020-05-05
      • 2020-09-21
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多