2013-12-23 2 views
1

У меня есть контроллер RESTful для моих пользователей, чтобы обрабатывать просмотр профиля пользователя.Laravel 4. маршрут контроллера по умолчанию не принимает аргументы

Проблема заключается в следующем:

Я хочу, чтобы URL, чтобы посмотреть, как этот www.example.com/user/1

Это покажет пользователю с идентификатором 1. Проблема в том, что, когда я определить метод getIndex в UserController он не примет идентификатор в качестве аргумента.

Вот моя routes.php часть:

Route::controller('user', 'UserController'); 

Теперь, я понимаю, что GetIndex является своего рода маршрут по умолчанию, если ничего другого не поставляется в URL, и так это:

public function getIndex() { 

} 

в UserController будет принимать маршруты,

"www.example.com/user/index" 

и

"www.example.com/user" 

а также! не

Однако, если я включаю аргумент, что он должен взять из URL, он больше не работает:

public function getIndex($id) { 
    //retrieve user info for user with $id 
} 

Это будет реагировать только на

"www.example.com/user/index/1" 

и не

"www.example.com/user/1" 

Как я могу заставить последнее работать? Я действительно не хочу загромождать URL со словом «индекс», если это не обязательно.

ответ

0

Если вы планируете это делать, лучший способ - использовать контроллеры RESTful.

Изменение маршрута к этому,

Route::resource('user', 'UserController'); 

Затем генерировать контроллер с помощью php artisan команды

php artisan controller:make UserController 

Это произведет контроллер со всеми RESTful функциями,

<?php 

class UserController extends \BaseController { 

    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 
    public function index() // url - GET /user (see all users) 
    { 
     // 
    } 

    /** 
    * Show the form for creating a new resource. 
    * 
    * @return Response 
    */ 
    public function create() 
    { 
     // 
    } 

    /** 
    * Store a newly created resource in storage. 
    * 
    * @return Response 
    */ 
    public function store() // url - POST /user (save new user) 
    { 
     // 
    } 

    /** 
    * Display the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function show($id) // url - GET /user/1 (edit the specific user) 
    { 
     // 
    } 

    /** 
    * Show the form for editing the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function edit($id) 
    { 
     // 
    } 

    /** 
    * Update the specified resource in storage. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function update($id) // url - PUT /user/1 (update specific user) 
    { 
     // 
    } 

    /** 
    * Remove the specified resource from storage. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function destroy($id) // url - DELETE /user/1 (delete specific user) 
    { 
     // 
    } 

} 

Для получения дополнительной информации см. Этот код Laravel RESTful controller parameters

0

Для отображения www.example.com/user/1 на адресной строке вы должны использовать метод show. В Laravel, по умолчанию контроллер по умолчанию создает 7 маршрутов. Шоу - один из них.

в контроллере создать метод, как следующие:

public function show($id) 
{ 
    // do something with id 

    $user = User::find($id); 
    dd($user); 
} 

Теперь Browse http://example.com/user/1.

+0

@devo. Насколько я понимаю, такой контроллер фактически был контроллером ресурсов, тогда как контроллер RESTful был таким, что каждая функция соответствует действию HTTP и URI, объединенным вместе. В данном случае это: 'общественная функция getProfile() {}' в контроллере пользователя будет реагировать на запрос HTTP GET для '.com/пользователя/profile' Весь мой контроллер пользователя настроен чтобы использовать этот метод, и я предпочел бы сохранить его таким образом. Нет ли способа заставить его работать без использования контроллера ресурсов? или просто включит функцию show в любом контроллере? –

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