まず、Kohanaのドキュメントはひどいものです。人々は「ドキュメントを読む」ようになります。私はドキュメントを読んでいて、それほど意味をなさないと思われます。コードの一部をコピーして貼り付けることはできません。ドキュメンテーションのいくつかのことのために働く。念頭に置いてKohana 3.2 - ルーティングに関する質問
、私はそうのようなルートを持っている:
//(enables the user to view the profile/photos/blog, default is profile)
Route::set('profile', '<userid>(/<action>)(/)', array(// (/) for trailing slash
"userid" => "[a-zA-Z0-9_]+",
"action" => "(photos|blog)"
))->defaults(array(
'controller' => 'profile',
'action' => 'view'
))
これは、ビューにユーザー写真やhttp://example.com/username/blog
を閲覧するために取るべきhttp://example.com/username
を行くために、ユーザーのプロファイルに取られ、http://example.com/username/photos
私を可能にしますブログ。
誰かがhttp://example.com/username/something_else
に行く場合<userid>
で指定されたユーザーに対しては、アクションview
をデフォルトにしたいが、これを行う方法が見つからないようだ。
私はこのようにそれを行うことができます:
Route::set('profile', '<userid>(/<useraction>)(/)', array(
"userid" => "[a-zA-Z0-9_]+",
"useraction" => "(photos|blog)"
))->defaults(array(
'controller' => 'profile',
'action' => 'index'
))
を、コントローラで次の操作を行います。
public function action_index(){
$method = $this->request->param('useraction');
if ($method && method_exists($this, "action_{$method}")) {
$this->{"action_{$method}"}();
} else if ($method) {
// redirect to remove erroneous method from url
} else {
$this->action_view(); // view profile
}
}
(。それは__construct()
機能で良いかもしれないが、あなたはそれの要点を得ます)
より良い方法がある場合は、私はむしろそれをやりたいと思います(本当にあるはずです)
私は答えは正規表現であるかもしれないが、以下が動作しないと思う:
$profile_functions = "blog|images";
//(enables the user to view the images/blog)
Route::set('profile', '<id>/<action>(/)', array(
"id" => "[a-zA-Z0-9_]+",
"action" => "($profile_functions)",
))->defaults(array(
'controller' => 'profile'
));
Route::set('profile_2', '<id>(<useraction>)', array(
"id" => "[a-zA-Z0-9_]+",
"useraction" => "(?!({$profile_functions}))",
))->defaults(array(
'controller' => 'profile',
'action' => 'view'
));
何もIDの後にされていないとき、それは一致しないが。
申し訳ありませんがわかりません。何に戻る?配列を使用するのではなく –
の代わりに私を無視してください... 'in_array(" action _ {$ request - > _ action} "、get_class_methods($ this))' –
私がcorretlyを理解していれば、私の編集を見てください。 –