Cakephp arroja un error a menos que la matriz esté dividida

Así que tengo una llamada Api donde obtengo una matriz json:

Cuando hago lo siguiente:

$data = $this->HasOffers->get_full_detail_report()['data']['data']; $this->set('data',$data); 

me sale un error diciendo que an internal error has occoured

Sin embargo, si lo hago:

 $data = $this->HasOffers->get_full_detail_report(); $data2 = $data['data']['data']; $this->set('data',$data2); 

todo está funcionando correctamente

Ahora mi pregunta es: ¿por qué está pasando esto? y ¿cómo puedo solucionarlo?

La syntax que está utilizando en el primer ejemplo solo está disponible en PHP> = 5.4. Consulte la sección correspondiente del manual de PHP: http://php.net/manual/en/language.types.array.php#example-88

Puede ver un ejemplo que se ejecuta en diferentes versiones de PHP en: http://3v4l.org/XhCKH

Es probable que su sitio CakePHP haya desactivado la generación de informes de errores, por lo que, en lugar de mostrar el error de syntax, muestra un Error interno.

Supongo que tiene depuración <2, por lo que la descripción del error no es muy detallada. Sin embargo, se sabe que ese comportamiento es un problema de PHP <5.4 ( publicación relacionada con ese tema).

Para “arreglarlo”, necesita actualizar PHP a 5.4 como mínimo. O bien, simplemente use una variable intermedia para esos casos, no es tan malo.

Esto sucede porque la matriz a la que hace referencia en el primer ejemplo solo existe después de que se llama a la función get_full_detail_report() . PHP no le gusta esto. PHP quiere que su matriz exista antes de hacer referencia a ella. Supongo que intenta localizar cualquier variable dentro de su extracto antes de realizar cualquier operación, lo que significa que está buscando una matriz que no existe hasta que realice esas operaciones.

Si alguien tiene más información sobre esto, agradecería sus revisiones / comentarios.