2013-10-06 3 views
0

Я пытаюсь пути к RESTful контроллера с помощью следующего в приложении/routes.php:Laravel 4 Route :: Контроллер() возвращает NotFoundHttpException

Route::controller('register', 'RegisterController'); 

Route::get('/', '[email protected]'); 

В моем приложение/контроллеры/файла RegisterController.php Я добавил следующее:

<?php 

class RegisterController extends BaseController 
{ 
    public function getRegister() 
    { 
     return View::make('registration'); 
    } 

    public function postRegister() 
    { 
    $data = Input::all(); 
    $rules = array(
     'first_name' => array('alpha', 'min:3'), 
     'last_name' => array('alpha', 'min:3'), 
     'company_name' => array('alpha_num'), 
     'phone_number' => 'regex:[0-9()\-]' 
    ); 
    $validator = Validator::make($data, $rules); 
    if ($validator->passes()) { 
     return 'Data was saved.'; 
    } 
    return Redirect::to('register')->withErrors($validator); 
    } 
} 

Я получаю следующее сообщение об ошибке:

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

Когда я бегу PHP ремесленных маршруты в терминале я получаю:

+--------+--------------------------------------------------+------+----------------------------+----------------+---------------+ 
| Domain | URI            | Name | Action      | Before Filters | After Filters | 
+--------+--------------------------------------------------+------+----------------------------+----------------+---------------+ 
|  | GET /register/register/{v1}/{v2}/{v3}/{v4}/{v5} |  | [email protected]  |    |    | 
|  | POST /register/register/{v1}/{v2}/{v3}/{v4}/{v5} |  | [email protected]  |    |    | 
|  | GET /register/{_missing}       |  | [email protected]  |    |    | 
|  | GET/           |  | [email protected] |    |    | 
+--------+--------------------------------------------------+------+----------------------------+----------------+---------------+ 

Я не понимаю, почему регистр дважды отображалось в URI, и второе действие GET отсутствует, и почему я получаю эту ошибку.

ответ

5

Если вы используете RESTful API, лучший способ в вашем маршруте,

Route::resource('register', 'RegisterController'); 

И изменить public function getRegister() к public function index() и public function postRegister() к public function store()

Тогда index() может быть доступ с помощью GET http://localhost/laravel/register и store() с использованием POST http://localhost/laravel/register

Chaneg http://localhost/laravel/ с вашим.

И тот же способ, update($id) используется для обновления и destroy($id) используется для удаления

+0

Работает отлично! Спасибо за быстрый и проницательный ответ. Думаю, мне нужно исследовать разницу в использовании Route :: resource() vs Route :: controller(). Ура! –

+0

@GeekyGoon, если хотите, проверьте некоторые из моих подобных ответов здесь http://stackoverflow.com/questions/19196636/laravel-restful-controller-parameters/19196884#19196884 и http://stackoverflow.com/questions/19190389/ laravel-4-remove-index-on-default-getindex-controller-function/19193669 # 19193669 затем http://stackoverflow.com/questions/19124018/laravel-retrieving-data-from-rest-api/19132837#19132837 – devo

+0

Если вы хотите пойти 'Route :: controller ('register', 'RegisterController')' way, вы можете использовать имена функций 'getIndex' и' postIndex' для достижения тех же результатов. см.: [Restful-контроллеры] (http://laravel.com/docs/controllers#restful-controllers) – tharumax

1

Route :: контроллера ('регистр', 'RegisterController');

Это также будет работать, если вы измените его

Route :: контроллер ('/', 'RegisterController');

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