Laravel 4: перенаправление запроса post на другой метод контроллера
у меня есть контроллер, как показано ниже,
MyController:
public function methodA() {
return Input::get('n')*10;
}
public function methodB() {
return Input::get('n')*20;
}
Я хочу вызвать метод a внутри MyController по данным в должности значение.
маршруты.в PHP
Route::post('/', function(){
$flag = Input::get('flag');
if($flag == 1) {
//execute methodA and return the value
} else {
//execute methodB and return the value
}
});
Как я могу это сделать ?
3 ответов
то, что я думаю, было бы более чистым решением, - это отправить ваш запрос на разные URL-адреса в зависимости от вашего флага и иметь разные маршруты для каждого, которые сопоставляются с вашими методами контроллера
Route::post('/flag', 'MyController@methodA');
Route::post('/', 'MyController@methodB);
EDIT:
чтобы сделать это по-своему, Вы можете использовать этот фрагмент
Route:post('/', function(){
$app = app();
$controller = $app->make('MyController');
$flag = Input::get('flag');
if($flag == 1) {
return $controller->callAction('methodA', $parameters = array());
} else {
return $controller->callAction('methodB', $parameters = array());
}
});
или
Route:post('/', function(){
$flag = Input::get('flag');
if($flag == 1) {
App::make('MyController')->methodA();
} else {
App::make('MyController')->methodB();
}
});
и просто отметить - У меня есть абсолютно нулевой практический опыт работы с Laravel, я просто искал и нашел это.
согласно вашему ответу в комментариях, вам нужно 1 url и решить, какой метод использовать на основе значения $_POST. Это то, что вам нужно:
в своем Routes.php
файл, добавьте общий метод, который
Route::post('/', 'MyController@landingMethod);
в своем :
public function landingMethod() {
$flag = Input::get('flag');
return $flag == 1 ? $this->methodA() : $this->methodB();//just a cleaner way than doing `if...else` to my taste
}
public function methodA() { //can also be private/protected method if you're not calling it directly
return Input::get('n') * 10;
}
public function methodB() {//can also be private/protected method if you're not calling it directly
return Input::get('n') * 20;
}
надеюсь, что это помогает!
это для Laravel 4.X. При использовании Laravel 5 необходимо добавить пространства имен... Вопрос о Laravel 4
на Route::controller()
метод-это то, что вам нужно.
ваши файлы маршрутов должны выглядеть следующим образом:
Route:post('/', function(){
$flag = Input::get('flag');
if($flag == 1) {
Route::controller('/', 'MyController@methodA');
} else {
Route::controller('/', 'MyController@methodB');
}
});
и методы будут выглядеть так:
public function methodA() {
return Input::get('n') * 10;
}
public function methodB() {
return Input::get('n') * 20;
}