URLを整理するための正規表現ルートを定義しています。ユーザが追加したすべてのページは、実際のコントローラwww.example.com/userpages/page-slugを使用するのではなく、www.example.com/page-slugというURLを使用します。他のページは、コントローラ:アクションルーティングスキームの標準モジュールに従います。正規表現ルーティング - ルールが見つかりません
私はルータの優先順位を使用してこれを実現しようとしています。私は、以下のスキームを定義している
..
class Default_Bootstrap extends Zend_Application_Module_Bootstrap{
protected function _initRoute() {
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter(); // returns a rewrite router by default
$route['index'] = new Zend_Controller_Router_Route_Regex(
'/',
array(
'module' => 'default',
'controller' => 'index',
'action' => 'index'
)
);
$route['contact'] = new Zend_Controller_Router_Route_Regex(
'contact/(\d+)',
array(
'module' => 'default',
'controller' => 'contact',
'action' => 'index'
)
);
$route['research'] = new Zend_Controller_Router_Route_Regex(
'research/(\d+)',
array(
'module' => 'default',
'controller' => 'research',
'action' => 'index'
)
);
$route['account'] = new Zend_Controller_Router_Route_Regex(
'account/(\d+)',
array(
'module' => 'default',
'controller' => 'account',
'action' => 'index'
)
);
$route['userpages'] = new Zend_Controller_Router_Route_Regex(
'/(.+)',
array(
'module' => 'default',
'controller' => 'userpages',
'action' => 'index'
),
array(
'slug' => 1
),
'%s'
);
$router->addRoute('userpages', $route['userpages']);
$router->addRoute('contact', $route['contact']);
$router->addRoute('research', $route['research']);
$router->addRoute('account', $route['account']);
$router->addRoute('index', $route['index']);
}
}
物事は、一般的にルータの優先順位は、インデックス/アカウント/研究/連絡先のページが正しいコントローラを拾っていることを確実にすることでOK取り組んでいます。ただし、「ユーザーページ」のルートに含まれるURLにアクセスしようとすると、 "about-us"、最終的なキャッチすべてのルートが見つかりませんでした...
Message: Invalid controller specified (about-us)
.
.
.
Request Parameters:
array (
'controller' => 'about-us',
'action' => 'index',
'module' => 'default',
)
私はここで間違っていますか?正規表現は正しい "/(.+)"が索引ページではないものをキャッチしているはずです。
EDIT:@phatfingers、OKです。私は "\ d +"を "。+"に編集して、1つ以上の文字をキャッチします。問題は解決しません。実際には、正規表現を変更する前に、私はURL www.example.com/52を試して、同じエラーが発生しました - "無効なコントローラが指定されました(52)"。変更後、上記のスニペットごとのコードでは、ルールはまだ一致するものを見つけることができません。
正規表現 "(\ d +)"は数字のみと一致します。 URL例 "www.example.com/page-slug"は数字で終わらない。 – phatfingers
@phatfingersの観測のおかげで、上記の私の編集を参照してください - ルールはまだ期待どおりに一致していません – NaNuk
私は 'userpages'正規表現にスラッシュを入れなければならないと思う、つまり '( '。+)' –