Array multi dimensi ranting - Tidak dapat mengakses nilai

Oct 26 2020

Saya memiliki array multidimensi, tetapi karena alasan tertentu ranting saya tidak merespons dengan nilai array.

Di bawah ini adalah Dump ranting saya

array (size=2)
  0 => 
    object(App\Models\Entities\Strategy\CriticalSuccessFactor)[5]
      private int 'csfId' => int 26
      private iterable 'kpis' => 
        array (size=1)
          0 => 
            object(App\Models\Entities\Strategy\KeyPerformanceIndicator)[10]
              ...
  1 => 
    object(App\Models\Entities\Strategy\CriticalSuccessFactor)[11]
      private int 'csfId' => int 27
      private iterable 'kpis' => 
        array (size=1)
          0 => 
            object(App\Models\Entities\Strategy\KeyPerformanceIndicator)[12]

Saya menemukan tautan ini, tetapi tidak menjawab pertanyaan saya.

Array Multidimensi di Twig

Di bawah ini adalah representasi dari data array yang saya kerjakan

csfs[
    private int 'csfId' => int 26
    
    'kpis' => [
        private int 'kpiId' => int 42
    
        'objectives' => [
          private int 'objectivesId' => int 40
        ]
    ] 
]

ketika saya mengeluarkan variabel dengan ranting saya tidak mendapatkan apa-apa.

Ini Ranting saya:

{% for csf in csfs %}
    {% for kpi in csf.kpis %}
        <p> kpi ID : {{ kpi.kpiId }}</p>
    {% endfor %}
{% endfor %}

{{csf.csfId}} berfungsi. Ini mencetak ID.

Saya bisa mendapatkan nilai array pertama tidak ada masalah. Tetapi saya tidak dapat mengakses array kpis

Jawaban

2 DarkBee Oct 26 2020 at 15:45

Seperti yang terlihat dalam dokumentasi dari twig,

Demi kenyamanan foo.bar melakukan hal-hal berikut pada lapisan PHP:

check if foo is an array and bar a valid element;
if not, and if foo is an object, check that bar is a valid property;
if not, and if foo is an object, check that bar is a valid method (even if bar is the constructor - use __construct() instead);
if not, and if foo is an object, check that getBar is a valid method;
if not, and if foo is an object, check that isBar is a valid method;
if not, and if foo is an object, check that hasBar is a valid method;
if not, return a null value.

Twig juga mendukung sintaks khusus untuk mengakses item pada array PHP, foo ['bar']:

check if foo is an array and bar a valid element;
if not, return a null value.

Jadi, Anda memiliki dua opsi di sini:

  1. Sesuaikan modelnya CriticalSuccessFactor

Anda dapat mengganti nama metode getKeyPerformanceIndicatorsmenjadi getKpisatau menambahkan metode getKpisyang hanya referensigetKeyPerformanceIndicators

public function getKpis() {
    return $this->getKeyPerformanceIndicators();
}
  1. Sesuaikan template Anda dan panggil metode getKeyPerformanceIndicatorssecara langsung daripada membiarkan twigsecara ajaib memutuskan metode tersebut
{% for kpi in csf.getKeyPerformanceIndicators%}
   ...
{% endfor %}