2014-02-11 1 views
0

я делаю форму на странице, как это:Laravel4: маршрут missingMethod, когда представить форму, используя метод пут (Раскрыты, ошибка мной)

{{ Form::open(array('method'=>'put', 'url'=>URL::to('users/update').'/'.Auth::user()->id, 'class'=>'form-horizontal')) }}

Я пытаюсь обновить ДАННЫЕ без идти к новую страницу (получить данные), а затем опубликовать эту страницу для обновления.

Затем я использую этот маршрут на карту способа для обработки запроса:

Route::put('users/update/{id}', array('before'=>'csrf', 'uses'=>'[email protected]'));

Но я получаю contorller недостающего исключения.

любая помощь будет признателен :)

Редактировать

Некоторые дополнение: Если я использую метод пост вместо пут, я все еще получаю missingMethod. Если я использую метод get в методе маршрута и почты при отправке формы, данные формы будут отправлены, а затем бросьте исключение tokenNotMatch.

обновленного

некоторый связанный код на UserController

public function updateProfile($id) 
{ 
    if (Auth::check() && $id == Auth::user()->id) { 
     /* 
     if (Request::ajax()) { 
      Debugbar::info('ajax'); 
     }*/ 
     $input = array(
      'username' => Input::get('username'), 
      'email' => Input::get('email') 
     ); 
     $rules = array(
      'username' => 'required|min:4|unique:users', 
      'email' => 'required|email|unique:users' 
     ); 

     $validator = Validator::make($input, $rules); 
     if ($validator->fails()) { 
      return Redirect::refresh()->with('validator', $validator->messages()->all()); 
     } else { 
      $this->user->username = $input['username']; 
      $this->user->email = $input['email']; 
      $this->user->save(); 
      return Redirect::refresh()->with('message', Lang::get('user/message.profile_updated')); 
     } 
    } else { 
     return Redirect::to('users/login')->with('message', Lang::get('user/message.login_first')); 
    } 
} 

Информация о маршруте (Добавлено)

, когда я использую post представить форму и установить пост на маршруте, то информация маршрута, созданная Debugbar, выглядит следующим образом:

  • хозяин     -
  • URI     пользователи GET/{_ недостающее}
  • имя     -
  • действие     UserController @ missingMethod
  • перед тем     -
  • после     -

Запросить GET, почему?

Решаемые

Спасибо за людей посмотреть и ответили на мой вопрос. И извините, я ошибаюсь. В моем контроллере я использую Redirect::refresh() вместо Redirect::back(), пока я нахожусь на странице, запрошенной формой. Поэтому он запросит GET для обработки этого нового запроса после выполненного пост-запроса.

В любом случае, это заставляет меня больше понимать маршрут и что-то еще.Не все плохие вещи. ;-)

ответ

1

Это означает, что у вас нет функции updateProfile в вашем контроллере. Или у вас есть опечатка где-то, но она не может найти эту функцию в UserController.

+0

Теперь я отправляю свой метод updateProfile в UserController. См. Мой обновленный вопрос. Спасибо :) – tjfdfs

0

Ваша первая проблема заключается в том, что формы HTML не поддерживают ничего, кроме GET и POST в качестве методов формы. Вы можете увидеть спецификации here и другое решение для программистов StackExchange here.

Возможная причина продолжения ошибки может быть вызвана вашим routes.php файлом, по-прежнему использующим Route::put() вместо Route::post(). Ваш метод маршрута должен соответствовать вашему методу формы, если вы хотите, чтобы он работал. Если вы правильно изменили все это и по-прежнему получаете сообщение об ошибке, можете ли вы обновить всю информацию в своем исходном сообщении, чтобы отразить это?

+0

Когда я использую пост, я также изменяю маршрут от поста к сообщению, 'Route :: post ('users/update/{id}', array ('before' => 'csrf', 'uses' => 'UserController @ updateProfile')); '. И я сказал в __Edit__, это создаст «NotFoundHttpException» с сообщением «Метод контроллера не найден». И о 'put', {{Form: open (...)}} auto генерирует скрытый ввод, который указывает, что эта форма использует put, а __post__ - для атрибута метода формы. Я думаю, что все в порядке. – tjfdfs

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