2016-09-18 3 views
-1

ブレードテンプレートからコントローラにアレイを渡して、フォームフィールドに処理しようとしています。 configファイルは変更することで簡単にフォームを作成できるように、configの配列は 'テンプレート'のように動作するはずです。ブレードからコントローラへの配列の受け渡し:要素へのアクセス時の未定義インデックス

配列を渡している間に、それが要素(未定義のインデックス)にアクセスすることは不可能です。

私のブレードのテンプレートで設定ファイル(の一部)

return [ 

    'tabs' => [ 

     'Menu'  => [ 
      'name' => 'menu', 
      'type' => 'string', 
      'length' => 100, 
      'default' => null 
     ], 
     ... 
    ] 

] 

私は、コントローラの機能を呼び出すこの配列を繰り返し処理しています:

@foreach($tabs as $key => $fld) 
    {!! \App\Classes\Fields::createField($key, $fld, $page) !!} 
@endforeach 

コントローラ(simplyfied):

class Fields 
{ 
    public static function createField($key, $fld, $page) 
    { 
     var_dump($fld); 

     // Result------------------------------- 

     // array (size=4) 
     // 'name' => string 'menu' (length=4) 
     // 'type' => string 'string' (length=6) 
     // 'length' => int 100 
     // 'default' => null  } 

     var_dump($fld['name']); 

     // Result-------------------------------  

     // ErrorException in Fields.php line 19: 
     // Undefined index: name 
     // (The other elements also can't be accessed) 

} 

私は本当に理解していません。 Var_dumpは有効な配列を表示しますが、要素にはアクセスできません。私はいくつかの時間のために私の髪を引っ張っています。これはLaravelのバグですか、私は自分自身をバグですか? ;-)

+0

'$ fld'は' name'、 'type'、' length'、 'default'の4つの要素を含む**配列**です。コードに注意して注意深く読んでください。あなたは$ fld ["name"] 'ではなく' $ fld ["Menu"] ["name"] 'と言っていました。 – Sherif

+1

あなたはforeachに '$ fld'を使い、' {!! \ App \ Classes \ Fields :: createField($ key、$ field、$ page)!!} 'あなたは' $ field'を使います。それを変更。これはあなたの問題を解決します。 – Manish

+0

あなたの 'createField()'静的メソッド内で '$ fld'変数をループすることができますか? 'foreach($ fld as $ k => $ v){var_dump($ k);これは何が起こっているのかを見るのに役立つかもしれません... – Poiz

答えて

1

あなたの$fld配列をループしてみましたか?createField()方法で結果を確認しましたか?これは...あなたに

BLADE

CONTROLLER

<?php 

    class Fields { 


     public static function createField($key, $fld, $page){ 
      // JUST FOR DEBUGGING PURPOSES: TRY THIS & SEE WHAT YOU GET. 
      // BUT CHECK FIRST IF $fld IS AN ARRAY 
      if(is_array($fld)){ 
       foreach($fld as $key=>$value){  
        var_dump($key); 
        var_dump($value); 
       } 
      }else{ 
       // OTHERWISE, TRY DETERMINING THE TYPE OF $fld 
       var_dump("\$fld IS AN OBJECT? ", is_object($fld)); 
       var_dump("\$fld IS A STRING? ", is_string($fld)); 
      } 

      var_dump($fld); 
      var_dump($fld['name']); 
     } 
    } 

UPDATE

をSIMPLIFIED
@foreach($tabs as $key => $fld) 
     {!! \App\Classes\Fields::createField($key, $fld, $page) !!} 
    @endforeach 

をバグに少し洞察力を与えることができます210

<?php class Fields { public static function createField($key, $fld, $page){ // CREATE VARIABLES FOR EACH EXPECTED VALUE(S): // INITIALIZE THEM TO NULL... $name = $type = $length = $default = null; // JUST FOR DEBUGGING PURPOSES: TRY THIS & SEE WHAT YOU GET. // BUT CHECK FIRST IF $fld IS AN ARRAY if(is_array($fld)){ foreach($fld as $key=>$value){ switch($key){ case "name": $name = $value; break; case "type": $type = $value; break; case "length": $length = $value; break; case "default": $default = $value; break; } } } echo $name; echo $type; echo $length; echo $default; } } 
+0

foreach()の引数が無効です(マニッシュを幸せに保つために$フィールドを$ fldに変更しました): – klaaz

+0

おそらく、更新されたコードが示すように 'if(){else {}'ブロック内でループを試してみよう... – Poiz

+0

今私たちはforeach is_array($ fld)を囲んでいればうまくいくでしょう!しかし、それは常に配列であり、その呼び出しは1つしかないので、奇妙です。 – klaaz

関連する問題