2016-09-18 76 views
-1

我試圖從刀片模板傳遞一個數組(源自自定義配置文件)到控制器以將其處理爲表單字段。配置數組應該像'模板'一樣,以便通過更改配置文件輕鬆創建表單。將陣列從刀片傳遞到控制器:訪問元素時未定義的索引

雖然傳遞數組似乎工作,我不可能訪問它的元素(未定義索引)。

(的一部分)的配置文件

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'是一個**數組**,它包含4個元素,它們具有'name','type','length'和'default'鍵。注意你的代碼並仔細閱讀。你打算說'$ fld [「Menu」] [「name」]'而不是'$ fld [「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); var_dump($ v);};'這可以幫助看看發生了什麼...... – Poiz

回答

1

您是否嘗試在您的createField()方法中循環訪問$fld數組以查看結果?這可能給你一點點的見解上的錯誤...

BLADE

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

簡化控制器

<?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

<?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()提供的無效參數(在代碼中將$ field更改爲$ fld以保持Manish的快樂:-)) – klaaz

+0

也許你可能想要以更新後的代碼描述的方式嘗試循環內的if(){} else {}塊... – Poiz

+0

現在我們正在某個地方前進,如果我附上foreach is_array($ fld),它正在工作!奇怪的,因爲它總是一個數組,只有一個調用它... – klaaz

相關問題