0 レビュー
1 回答
php-ルーティングの問題、URLの変数に基づくコントローラーの呼び出し-Laravel 4
Laravel 4を使用してアプリケーションを開発しています。必要なのは、次のとおりです。 次のルートがあるとしましょう:
Route::get('/myroute/{entity}/methodname',
);
その中で、エンティティ変数に基づいて、どのコントローラーとメソッドを呼び出すかを決定する必要があります。例:
'MyNameSpace\MyPackage\[email protected]'
もし
entity == Student
そして
を呼び出します
'MyNameSpace\MyPackage\[email protected]'
もし
entity == Staff
Laravel 4ルーティングでどのように行うことができますか?それとも、2つの異なるルートを考え出す必要がありますか?
Route::get('/myroute/Student/methodname') and Route::get('/myroute/Staff/methodname')
わからない
0
レビュー
答え :
解決策:
これはあなたのニーズに合うはずです
Route::get('/myroute/{entity}/methodname', function($entity){
$controller = App::make('MyNameSpace\\MyPackage\\'.$entity.'Controller');
return $controller->callAction('methodname', array());
}
エラーを回避するために、コントローラーとアクションが存在するかどうかも確認しましょう。
Route::get('/myroute/{entity}/methodname', function($entity){
$controllerClass = 'MyNameSpace\\MyPackage\\'.$entity.'Controller';
$actionName = 'methodname';
if(method_exists($controllerClass, $actionName.'Action')){
$controller = App::make($controllerClass);
return $controller->callAction($actionName, array());
}
}
更新
プロセスをもう少し自動化するために、アクション名を動的にすることもできます
Route::get('/myroute/{entity}/{action?}', function($entity, $action = 'index'){
$controllerClass = 'MyNameSpace\\MyPackage\\'.$entity.'Controller';
$action = studly_case($action) // optional, converts foo-bar into FooBar for example
$methodName = 'get'.$action; // this step depends on how your actions are called (get... / ...Action)
if(method_exists($controllerClass, $methodName)){
$controller = App::make($controllerClass);
return $controller->callAction($methodName, array());
}
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。