2016-05-24 3 views
2

Я строю макет API с помощью контроллеров ресурсов Laravel, все работает хорошо, пока я не попытаюсь переопределить маршрут ресурсов Laravel по умолчанию при вызове get create, но Laravel просто не примет перезапись. В документации указано следующее:Laravel 5.2 Маршрутизация ресурсов переопределяет действия по умолчанию

Если возникает необходимость добавлять дополнительные маршруты к контроллеру ресурсов за пределы маршрутов ресурсов по умолчанию, вы должны определить эти маршруты перед вызовом Route :: resource; в противном случае, маршруты, определенные по методу ресурсов, может непреднамеренно взять верх над вашими дополнительными маршрутами:

В моем коде я следующее:

routes.php

Route::group(['prefix' => 'api/v1', 'middleware' => 'cors'], function() { 
    Route::get('test/create', 'V1\Universal\[email protected]'); 
    Route::resource('test', 'V1\Universal\TestController'); 
}); 

TestController.php

public function create2() 
{ 
    return "create 2 override function"; 
} 


public function create() 
{   
    return "create default function"; 
} 

При вызове API/api/v1/test/create его всегда срабатывает метод create(), а именно n метод create2(). Согласно документации Laravel, мой пользовательский дополнительный маршрут должен иметь приоритет, как определено перед ресурсом.

Любые идеи?

ответ

1

Если вы хотите переопределить маршруты ресурсов, вы хотите попробовать их добавить после Route::resource. Цитата из документации говорит о том, как добавить маршрутов маршрута к ресурсу, а не о том, как их переопределить:

Если возникает необходимость добавить дополнительные маршруты к ресурсу контроллера за маршруты ресурсов по умолчанию, вы должны определите те маршруты до вашего вызова Route :: resource; в противном случае, маршруты , определенные методом ресурсов, может непреднамеренно иметь приоритет над вашими дополнительными маршрутами

Вы также можете использовать except аргумент:

Route::group(['prefix' => 'api/v1', 'middleware' => 'cors'], function() { 
    Route::get('test/create', 'V1\Universal\[email protected]'); 
    Route::resource('test', 'V1\Universal\TestController', ['except' => ['create']]);); 
}); 

В этом случае Route::resource не будет создавать create маршрут.

Смежные вопросы