Метод Laravel Form PUT не работает

Я создал форму для обновления ролевой модели, но при нажатии на кнопку «Сохранить» она, похоже, не подчиняется методу контроллера. Даже сообщение об ошибках проверки не появляется, если поле ввода имени неверно. Ниже вы можете найти код, используемый для формы.

Форма:

{!! Form::model($role, ['route' => ['roles.update', $role->id], 'method' => 'put']) !!}

   @include('roles.fields')

{!! Form::close() !!}

Поля для формы:

<!-- Name Field -->
<div class="form-group col-sm-6">
   {!! Form::label('name', 'Name:') !!}
   {!! Form::text('name', null, ['class' => 'form-control']) !!}
</div>

<!-- Display Name Field -->
<div class="form-group col-sm-6">
   {!! Form::label('display_name', 'Display Name:') !!}
   {!! Form::text('display_name', null, ['class' => 'form-control']) !!}
</div>

<!-- Description Field -->
<div class="form-group col-sm-12 col-lg-12">
   {!! Form::label('description', 'Description:') !!}
   {!! Form::textarea('description', null, ['class' => 'form-control',   'rows' => '5']) !!}
</div>

<!-- Submit Field -->
<div class="form-group col-sm-12">
   {!! Form::submit('Save', ['class' => 'btn btn-primary']) !!}
   <a href="{!! route('roles.index') !!}" class="btn btn-  default">Cancel</a>
</div>

Запрос:

namespace App\Http\Requests;

use App\Http\Requests\Request;
use App\Models\Role;

class UpdateRoleRequest extends Request
{

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
     public function authorize()
     {
         return true;
     }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
     public function rules()
     {
         return Role::$rules;
     }
}

Контроллер:

/**
 * Update the specified Role in storage.
 *
 * @param  int              $id
 * @param UpdateRoleRequest $request
 *
 * @return Response
 */
public function update($id, UpdateRoleRequest $request)
{
    $role = $this->roleRepository->findWithoutFail($id);

    if (empty($role)) {
        Flash::error('Role not found');

        return redirect(route('roles.index'));
    }

    $role = $this->roleRepository->update($request->all(), $id);

    Flash::success('Role updated successfully.');

    return redirect(route('roles.index'));
}

Модель:

<?php

namespace App\Models;

use Eloquent as Model;
use Zizaco\Entrust\EntrustRole;
use Illuminate\Database\Eloquent\SoftDeletes;

class Role extends EntrustRole
{
    use SoftDeletes;

    public $table = 'roles';

    protected $dates = ['deleted_at'];

    public $fillable = [
        'name',
        'display_name',
        'description'
    ];

    /**
     * The attributes that should be casted to native types.
     *
     * @var array
     */
    protected $casts = [
        'name' => 'string',
        'display_name' => 'string'
    ];

    /**
     * Validation rules
     *
     * @var array
     */
    public static $rules = [
        'name' => 'required|unique:roles'
    ];
}

Пожалуйста, помогите, если это возможно. Спасибо!


person Nas Atchia    schedule 24.08.2016    source источник


Ответы (2)


Вы не можете использовать put в качестве метода формы. Прочтите документацию о подмене методов в laravel.

{!! Form::model($role, ['route' => ['roles.update', $role->id], 'method' => 'post']) !!}
   <input type="hidden" name="_method" value="PUT">

   @include('roles.fields')

{!! Form::close() !!}
person Pawel Bieszczad    schedule 24.08.2016
comment
Я отредактировал это, и я все еще не могу заставить это работать, когда я нажимаю кнопку «Сохранить», ничего не происходит. Скажем, если я не вставлю какое-либо имя, он должен вернуть мне сообщение об ошибке проверки. Даже сообщение не показывает. Любая причина, почему это не работает? Спасибо - person Nas Atchia; 24.08.2016
comment
Ничего не происходит, как в чем? Страница перезагружается? Если это так, это означает, что проверка не удалась и не попала в контроллер. Чтобы отобразить ошибки проверки, снова просмотрите документацию. - person Pawel Bieszczad; 24.08.2016
comment
Спасибо за вашу помощь. В конце концов мне удалось заставить его работать. Это было связано с тем, что имя роли было уникальным, поэтому каждый раз, когда я нажимал «Сохранить», он возвращал мне сообщение об ошибке, и в представлении я не включал сообщение об ошибке флэш-памяти. Немного глупо, но спасибо :) - person Nas Atchia; 24.08.2016

Для тех, кто работает с HTML и laravel 5.2:

<form method="post" ... > {{ method_field('PUT') }} ... </form>

Надеюсь, это поможет людям.

person Vrian7    schedule 15.12.2016