2016-08-24 18 views
3

ロールモデルを更新するフォームを作成しましたが、保存ボタンをクリックするとコントローラメソッドに送信されません。名前入力フィールドが無効な場合でも、検証エラーメッセージは表示されません。以下に、フォームに使用されるコードを示します。Laravelフォーム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をフォームメソッドとして使用することはできません。 laravelにHTMLとlaravel 5.2で動作する人々のため

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

    @include('roles.fields') 

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

私はこれを編集しましたが、これはまだ動作しません。保存ボタンをクリックしても何も起こりません。名前を挿入しないと、検証エラーメッセージが返ってきたとしましょう。メッセージは表示されません。それがうまくいかない理由は何ですか?ありがとう –

+0

何も何も起こらない?ページがリロードされますか?もしそうなら、それは妥当性検査が失敗したことを意味し、決してコントローラに到達しなかったことを意味する検証エラーを表示するには、[documentation](https://laravel.com/docs/5.2/validation#quick-displaying-the-validation-errors)に再度お問い合わせください –

+0

ありがとうございます。私は最終的にそれが働くように管理しました。それはロール名がユニークであったため、保存をクリックするたびにエラーメッセージが返されていました。ビューにはエラーメッセージが表示されませんでした。ちょっとばかだけど感謝:) –

2

の方法詐称についてdocumentationを読む:

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

・ホープこのヘルプ人。