Как я могу использовать & quot; где & quot; в контроллере Laravel

Если у меня есть следующий маршрут:

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));
}
}

Спасибо за внимание.

1

Решение

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, у Джеффри Уэй будет отличное, ясное руководство по некоторым опасностям «неявной маршрутизации». Вот.

0

Другие решения

Чтобы убедиться в 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 запрос.

0

Чтобы сделать это, вы хотите обернуть Route::controller заявления в группе и применять where шаблон для группы, поскольку его глобальная настройка может быть неточной для других маршрутов:

Route::group('where' => ['id' => '\d+'], function () {

Route::controller('users', 'UsersController');
// other restful controller definitions with this pattern go here

}
0
По вопросам рекламы [email protected]