我正在尝试以不同的方式将url集成到多个控制器/操作中。假设我有两个控制器站点和产品控制器。我希望得到通信控制器的值,同时在url中传递不同的参数。我的意思是当我传递slug参数时,它必须从站点/页面获取,当我传递category参数时,它必须从product / view中获取。
'<category:>/<id:>' => 'product/view',
'<category:>' => 'product/view',
'<slug:>' => 'site/pages',
我已经尝试过以上示例,它适用于类别,但在slug上发生404错误。
修改
这就是我的其余任务的外观。
产品控制器操作
public function actionView($category, $id= null)
{
$category = Category::findOne(['slug' => $category]);
// rest of work
}
这是我的createUrl产品参数
Yii::$app->urlManager->createUrl(['/product/view','category'=> 'handicraft-product', 'id'=> 'nepali-thanka-134']);
我只是想像这样访问这个动作 http://www.example.com/handicraft-product或 http://www.example.com/handicraft-product/nepali-thanka-134
站点控制器操作
public function actionPages($slug)
{
$model = $this->findByPageSlug($slug);
return $this->render('pages',['model' => $model]);
}
这是我的createUrl params for site's pages action
Yii::$app->urlManager->createUrl(['/site/pages','slug' => 'terms-and-condition']);
这就是我想要访问此操作的方式 http://www.example.com/terms-and-condition
如何解决此问题? 提前致谢。
答案 0 :(得分:1)
2个选项:
1)使URL略有不同。您可以像这样定义它们:
'category/<category:>' => 'product/view',
'page/<slug:>' => 'site/pages',
根据您定义链接的方式,它们可能实际上有助于您的搜索引擎优化 2)创建自定义URL管理器规则以处理页面和类别的文本。看这里: http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#creating-rule-classes
在自定义规则中,您可以尝试查找类别网址,如果不能,则默认使用网页网址。