2016-04-17 9 views
0

従業員モデルをBladeテンプレートにバインドして、熱心な負荷関係の結果をフィールドに配置したいとします。私のコントローラでLaravel 5.2 Bladeテンプレートにオブジェクトを挿入する

私はページのコレクションを構築する:だから私は入力Laravel Collective form::textステートメントに$employee->country->nameを移入したい

{!! Form::model($employee, ['route' => ['employee.role', $employee->uuid], 'method' => 'POST']) !!} 

、私:私のフォームオープン文です

$employee = User::with('country', 'activeOrganisationRole')->first(); 

ロードする国名を取得することはできません。フォーム上の他のすべてのフィールドは、親コレクションから完全に読み込まれます。

私の国のフィールドは次のとおりです。

<div class="form-group"> 
    <label for="phone" class="control-label">Country</label> 
    {!! Form::text('country', null, ['id'=>'country', 'placeholder' => 'Country', 'class' => 'form-control']) !!} 
</div> 

上記の国フィールドが入力に全体の関係の結果をロードします。この入力にinjecting $employee->country->nameの正しい構文は何ですか?

ところで、これは完全に機能しますが、私はこの方法で何も学んでいません!

<label for="title" class="control-label">Country</label> 
<input id="country" class="form-control" value="{!! $employee->country->country !!}" readonly> 

答えて

1

私はLaravelCollectiveでFormBuilderは、オブジェクトから属性を取得するためにdata_get(Laravelヘルパー関数)を使用しています信じています。しかし、要素の名前のドットは奇妙なので、私はあなたのためのソースに少し掘り下げた。

次の選択肢(私の好みで注文した)のいずれかを持っている:

  1. あなたの従業員モデルにgetFormValueというメソッドを追加することができます。これは、値を要求しているフォーム要素の名前である単一のパラメーターをとります。 (そのようなものが時々Laravelと方法です)私は本当にこの上の任意のドキュメントを見つけることができませんでした

    public function getFormValue($name) 
    { 
        if(empty($name)) { 
         return null; 
        } 
    
        switch ($name) { 
         case 'country': 
          return $this->country->country; 
        } 
    
        // May want some other logic here: 
        return $this->getAttribute($name); 
    } 
    

    :それをこのような何かを実装します。私はtrawling the sourceでそれを見つけた - 本当にこれで欠点は、あなたがdata_getとあなたの従業員のオブジェクトから値を抽出するに変換し、試みを失うということです

    Shamlessプラグ PhpStorm と簡単ですが。

  2. テキストフィールドの名前をcountry[country]に変更します。ソースでは、ビルダーは '['と ']'を '。'に置き換えます。と ''をそれぞれ属性のオブジェクトを探すときに指定します。つまり、data_getcountry.countryを探します。

  3. 今後この問題が発生した場合はこちらに掲載しますが、お勧めできません

    従業員のモデルにgetCountryAttributeメソッドを渡します。 the documentationの "Form Model Accessors"の下で説明したように、$ employee-> countryから返されるものを上書きすることができます。しかし、実際のオブジェクトにアクセスすることはできません。

関連する問題