2015-12-30 5 views
0

В настоящее время я делаю демонстрационное приложение на Laravel4. В демо-приложении есть некоторые пользователи в базе данных. Я хочу редактировать их один за другим. У меня есть метод «postUpdate», тем не менее, во время редактирования (http://localhost/testlaravell/users/5/edit) пользователя из списка, я вижу ошибку -Laravel 4 - Route [users.postUpdate] не определено

ErrorException (E_ERROR) 
Route [users.postUpdate] not defined. (View: D:\wamp\www\testlaravell\local\app\views\users\edit.blade.php). 

У меня есть коды в routes.php:

Route::get('/', function() 
{ 
return View::make('hello'); 
}); 
Route::get('users/{all}/edit', '[email protected]'); 
Route::controller('users', 'UserController'); 

В UserController.php, я написал следующий скрипт для редактирования и обновления:

public function getEdit($id) 
{ 
    // 

    $user = User::find($id); 
    if (is_null($user)) 
     { 

      return Redirect::to('users/all'); 
     } 
    return View::make('users.edit', compact('user')); 
} 


/** 
* Update the specified resource in storage. 
* 
* @param int $id 
* @return Response 
*/ 
public function postUpdate($id) 
{ 
    // 


    $input = Input::all(); 
    $validation = Validator::make($input, User::$rules); 
    if ($validation->passes()) 
    { 
     //$user = User::find($id); 

      $user = User::find($id); 
      $user->username = Input::get('username'); 
      $user->name = Input::get('name'); 
      $user->email = Input::get('email'); 
      $user->phone = Input::get('phone'); 
      $user->password = Hash::make(Input::get('password')); 
      $user->save(); 

     return Redirect::route('users.getIndex', $id); 
    } 
    return Redirect::route('users.getEdit', $id) 
     ->withInput() 
     ->withErrors($validation) 
     ->with('message', 'There were validation errors.'); 
} 

код под edit.blade.php, как показано ниже:

@extends('users.user') 

@section('main') 

<h1>Edit User</h1> 
{{ Form::model($user, array('method' => 'PATCH', 'route' => array('users.postUpdate', $user->id))) }} 
<ul> 
    <li> 
     {{ Form::label('username', 'Username:') }} 
     {{ Form::text('username') }} 
    </li> 
    <li> 
     {{ Form::label('password', 'Password:') }} 
     {{ Form::text('password') }} 
    </li> 
    <li> 
     {{ Form::label('email', 'Email:') }} 
     {{ Form::text('email') }} 
    </li> 
    <li> 
     {{ Form::label('phone', 'Phone:') }} 
     {{ Form::text('phone') }} 
    </li> 
    <li> 
     {{ Form::label('name', 'Name:') }} 
     {{ Form::text('name') }} 
    </li> 
    <li> 
     {{ Form::submit('Update', array('class' => 'btn btn-info')) }} 
     {{ link_to_route('users.getAll', 'Cancel', $user->id, array('class' => 'btn')) }} 
    </li> 
</ul> 
{{ Form::close() }} 

@if ($errors->any()) 
<ul> 
    {{ implode('', $errors->all('<li class="error">:message</li>')) }} 
</ul> 
@endif 

@stop 

Что я пропустил, я не знаю. Кто-нибудь может мне помочь?

+0

Ваш маршрут не названный маршрут. Вы должны называть его понятным образом в маршрутизаторе, например: Route :: post ('users/update', 'UserController @ postUpdate') -> name ('users.postUpdate'); – naneri

+0

Предложение: вы, вероятно, захотите использовать контроллеры [RESTfull] (https://laravel.com/docs/4.2/controllers#restful-resource-controllers) вместо того, чтобы смешивать основные маршруты с неявными контроллерами. – Mirceac21

+0

@naneri После реализации вашего кода в маршрутах я получаю сообщение об ошибке - вызов неопределенного метода Illuminate \ Routing \ Route :: name() –

ответ

1

При использовании Route:controller у вас не будет названных маршрутов.

При запуске:

php artisan routes 

вы увидите, у вас будет name пусто контроллера маршрутов, так что вам нужно создать маршруты по отдельности, например, ваш postUpdate маршрут:

Route::post('users/update', ['as' => 'users.postUpdate', 'uses' => '[email protected]']); 

EDIT

Пример списка маршрутов (однако из Laravel 5 - так что это может быть немного иначе)

Route list preview

Вы также должны прочитать carefeully @xAoc ответ - вероятно, это будет лучшее решение (я почти никогда не использую controller метод)

+0

Спасибо, это работает. Однако команда «php artisan route: list» не работает.Могу ли я использовать команду «php artisan routes»? Кроме того, как я могу видеть, что имя (скажем, метод postUpdate) пуст для маршрутов контроллера. Можете ли вы опубликовать снимок экрана для этого? –

+0

@Niladri Пожалуйста, посмотрите мое редактирование. Я исправил это. Команда 'php artisan route: list' доступна в Laravel 5 –

+0

Еще раз спасибо! Я понимаю эту проблему. Но после нажатия кнопки «Отправить» на странице «Редактировать пользователя» это покажет мне следующую ошибку: Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException Метод контроллера не найден. –

2

На самом деле, вы должны пройти третий параметр, если вы хотите, чтобы маршрут называют по имени Ваш код будет похож

Route::controller('users', 'UserController', ['postUpdate' => 'users.postUpdate']); 

Третий параметр является массивом, где ключ это ваш метод и значение это ваше название маршрута

+0

Еще раз спасибо! Я понимаю проблему. Но после нажатия кнопки «Отправить» на странице «Редактировать пользователя», она покажет мне следующую ошибку: Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException Метод контроллера не найден –

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