2016-08-24 2 views
3

Я создал форму для обновления ролевой модели, но, щелкнув по кнопке сохранения, она не представляется для отправки методу контроллера. Даже сообщение ошибки проверки не появляется, если поле ввода имени недопустимо. Ниже вы можете найти код, используемый для формы.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' 
    ]; 
} 

Пожалуйста, помогите, если это возможно. Благодаря!

ответ

5

Вы не можете использовать put как способ формы. Прочитайте documentation о методе подмены в Laravel

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

    @include('roles.fields') 

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

Я отредактировал это, и я все еще не могу заставить это работать, когда я нажимаю кнопку сохранения, ничего не происходит. Скажем, если я не ввешу какое-либо имя, я должен вернуть мне сообщение об ошибке проверки. Даже сообщение не отображается. Любая причина, почему он не работает? Спасибо –

+0

Ничего не происходит, как в чем? Перезагружается ли страница? Если это означает, что проверка не прошла и никогда не попала в контроллер. Чтобы отобразить ошибки проверки, загляните в [документацию] (https://laravel.com/docs/5.2/validation#quick-displaying-the-validation-errors) –

+0

Спасибо за вашу помощь. В конечном итоге мне удалось заставить его работать. Это связано с тем, что имя роли было уникальным, поэтому каждый раз, когда я нажимал кнопку «Сохранить», он возвращал мне сообщение об ошибке, и в представлении я не включал сообщение об ошибке. Немного глупо, но спасибо :) –

2

Для тех людей, которые работают с HTML и Laravel 5.2:

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

Надежда это помогает людям.

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