2014-10-28 18 views
2

我以前catchAll路線我的配置所有請求路由,不匹配等航線,以單個動作

'catchAll' => ['site/page'] 

,它工作正常。

但是,所有的請求都會發生這種動作,即使是那些有獨立控制器/動作的請求。

我該如何映射路由以匹配控制器/操作,如果相應的控制器/操作不存在,則後備可以捕獲所有路由?

回答

7

這個配置你想要做什麼:

'urlManager' => [ 
    'class' => 'yii\web\UrlManager', 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     'contact' => 'site/contact', 
     '/' => 'page/view', 
------> HERE 
     '/<url:[a-zA-Z0-9-]+>' => 'site/page', 
    ], 
], 

你應該修改規則以捕獲更多字符。我用這個,因爲我知道我的路線。

當您要將網站置於維護模式時,應使用catchAll。在這種情況下也可以使用錯誤捕獲。

1

這也正是包羅萬象的財產的意圖:

當包羅萬象的屬性設置,它將取代從傳入的請求解析任何路線。通過上述配置,將使用相同的站點/離線操作來處理所有傳入的請求。

完成你想要的最簡單的方法是利用內置的錯誤處理。如果您使用errorHandler(如示例應用程序中定義的那樣),則每次遇到錯誤(例如不存在的路由)時都會觸發site/error操作。

在這次行動中,你可以使用異常類型來處理404錯誤的具體方式,例如:

public function actionError() 
{ 
    $exception = Yii::$app->errorHandler->exception; 

    if ($exception instanceof \yii\web\NotFoundHttpException) { 
     // all non existing controllers+actions will end up here 
    } else { 
     return $this->render('error', ['exception' => $exception]); 
    } 
} 
相關問題