Если у меня есть следующий маршрут:
Route::get('/user/{id}', function($id) {
return View::make(users.profile, array('id' => $id));
})->where(array('id' => '[0-9]+'));`
Как я могу сделать то же самое в контроллере Restful?
Route::controller('/user', 'UserController');
Мой UserController:
class UserController extends BaseController {
public function getProfile($id) {
return View::make('users.profile', array('id' => $id));
}
}
Спасибо за внимание.
where
не работает, когда прикован цепью к Route::controller
звонить, но вы можете достичь той же функциональности с Route::pattern
декларация. Так, например, этот код для Route :: controller (называемый «неявной маршрутизацией») будет работать, ограничивая id
к числовому:
Route::pattern('id', '\d+');
Route::controller('/user/{id}', 'UserController');
Затем в UserController getIndex
метод будет вызван из запроса GET:
class UserController extends BaseController {
public function getIndex($id) {
return View::make('users.profile', array('id' => $id));
}
}
Обратите внимание, однако, что это работает только для метода индекса, то есть для вызовов http:://example.com/user/99
, Если вы хотите использовать другие методы контроллера, использующие «неявную маршрутизацию», например, http:://example.com/user/profile/99
и метод контроллера getProfile($id)
, вам нужно объявить свой маршрут без {id}
параметр, вот так:
Route::controller('/user', 'UserController');
…в этом случае вы не можете использовать ->where
или же Route::pattern
ограничить {id}
, поскольку нет {id}
параметр для ограничения.
В конце концов, вам лучше использовать «явную маршрутизацию», как в начале вашего ответа, или использовать RESTful Resource Controllers (посмотреть документы) и указав свой маршрут как:
Route::resource('user', 'UserController');
,
Если вы подпишетесь на Laracasts, у Джеффри Уэй будет отличное, ясное руководство по некоторым опасностям «неявной маршрутизации». Вот.
Чтобы убедиться в methods
а также URL
запустить php artisan routes
из вашего терминала, так что вы получите список всех маршрутов, к которым у вас есть доступ с их URL
, В этом случае для следующего route
а также controller
Вы можете найти URL
лайк user/profile/10
// Route
Route::controller('/user', 'UserController');
// Controller
class UserController extends BaseController {
public function getProfile($id) {
return View::make('users.profile', array('id' => $id));
}
}
Так что используйте http://domain.com/user/profile/10
, Вот 10
будет передан в $id
переменная в вашем profile
метод. Также помните, что в RESTfull
Контроллер каждый метод должен иметь префикс с HTTP
глагол, на который они отвечают, так что в этом случае этот метод будет реагировать на GET
запрос.
Чтобы сделать это, вы хотите обернуть Route::controller
заявления в группе и применять where
шаблон для группы, поскольку его глобальная настройка может быть неточной для других маршрутов:
Route::group('where' => ['id' => '\d+'], function () {
Route::controller('users', 'UsersController');
// other restful controller definitions with this pattern go here
}