[英]Yii2 Routing rules conflicts with each other
我有以下2條規則:
'blog/<action>' => 'blog/default/<action>',
'blog/<slug:[0-9a-zA-Z\-.]+>' => 'blog/default/view',
我還有以下動作:
public function actionCheckSlug($slug) {
}
public function actionCreate() {
}
public function actionView($slug) {
return $this->render("view");
}
例如,當我嘗試訪問此URL(操作URL)時:
/blog/check-slug?slug=test
它可以正常工作,但是當我嘗試訪問此URL(例如,Slug URL)時:
/blog/test-test-test
我會得到一個錯誤:
yii\base\InvalidRouteException: Unable to resolve the request: blog/default/test-test-test
因為正在分析第一條規則,而不是第二條規則。 例如,我嘗試將它們反向,但是它沒有用(總是不能使用),還嘗試了其他方案,但沒有成功
知道如何使它起作用嗎?
我建議首先不要對兩個操作使用相同的url約定
'blog/<action>' => 'blog/default/<action>',
'blog/<slug:[0-9a-zA-Z\-.]+>' => 'blog/default/view',
容易成為
'blog/<action>' => 'blog/default/<action>',
'post/<slug:[0-9a-zA-Z\-.]+>' => 'blog/default/view',
或使用'blog/page-<slug:[0-9a-zA-Z\\-.]+>'
, blog/post/
..或僅使用任何不與現有結構沖突的約定
如果那不是您想做的事情,還是做不到? 在您的應用中,您可以只使用Slug來檢查現有的應用結構。
public function view($slug){
$model = $this->findBySlug($slug);
return $this->render('view', ['model' => $model]);
}
private function findBySlug($slug){
if ($this->hasMethod('action' . Inflector::classify($slug))
// this should prevent recursion
&& $slug != $this->action->id){
$this->runAction($slug);
return null;
}
return Post::find()->where(['slug' => $slug])
}
注意 :這僅是如何操作( 或如何操作 )的示例。 不要在任何生產環境中運行我糟糕的,未經測試的代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.