2017-07-07 1 views
0

Existe-t-il une manière élégante de modifier un nom d'entité avant de le transmettre à une vue? Dans mon exemple, j'ai un produit d'entité. Mon produit a un membre application_id. Je le produis en json. Maintenant, mon développeur Frontend aimerait recevoir cette valeur en tant qu'applicationId (pas de caractère de soulignement). Comme je retourne une structure assez complexe avec des objets, contenant d'autres objets et ainsi de suite, je n'aimerai pas parcourir tout le jeu de résultats et changer les noms de membres en boucle. Alors j'ai regardé dans l'entité et j'espérais trouver quelque chose comme $ _map où je pourrais mapper des noms de membres aux noms personnalisés, mais je n'ai rien trouvé.cakePHP3: Modifier le nom de l'entité avant le rendu

Existe-t-il un moyen de faire cela sans utiliser de boucle dans beforeRender?

Répondre

1

Le manual dit

Lors de la conversion d'une entité à une JSON les & virtuelles listes de champs cachés sont appliqués. Les entités sont également récursivement converties en JSON. Ce signifie que si vous voulez des entités chargées et leurs associations, CakePHP va gérer correctement la conversion des données associées dans le format correct .

Vous pouvez donc créer une propriété virtuelle dans votre Entoty cette façon

protected $_virtual = ['ApplicationId']; 

protected function _getapplicationId() 
{ 
    return $this->application_id; 
} 

semble un peu contre les conventions de nommage de gâteau, mais il fonctionne

+0

Merci, n'a pas pensé assez loin. Je dois encore ajouter l'application_id à $ _hidden pour le retirer de la sortie, mais c'est ok. Chose amusante cependant, en essayant d'accéder à $ this-> id_application dans _getapplicationId(), il est nul, alors que XDebug me montre la valeur correcte. J'ai dû changer _getapplicationId() en _getapplicationid() alors ça marche. Je suppose que c'est à cause de certains internes avec l'Inflector qui pourraient penser que getapplicationId essaie d'obtenir la valeur réelle application_id. – Seb