Twig & PHP Activerecord - Impossible d'accéder au champ de la table de jointure
-
13-12-2019 - |
Question
Je ne peux pas accéder à une table jointe avec phpacTiverecord / brindille. Voici le code simplifié. Il possède deux modèles (code et utilisateur), et chaque code appartient à un utilisateur, donc je souhaite énumérer des codes avec le nom de l'auteur du code.
PHP
// model
class Code extends ActiveRecord\Model {
static $belongs_to = array(
array('user'),
);
}
class User extends ActiveRecord\Model {
static $has_many = array(
array('code'),
);
}
// controller
$codes = Code::all(array('include' => 'user'));
var_dump($codes); //-> successfully displayed codes list and their authors
$this->twig->display('codelist.twig', $codes);
template.twig
{% for code in codes %}
{{ code.name }} //-> successfully displayed code's name
{{ code.user.name }} //-> failed to output user's name with error
{% endfor %}
// error:
// An exception has been thrown during the rendering of a template ("Call to undefined method: user") in "inc/template.twig" at line **.
J'ai vu cette page: http://twig.sensiolabs.org/doc/templates.html
Mise en œuvre
Pour la commodité, FOO.Bar fait les choses suivantes sur le PHP COUCHE:
Vérifiez si FOO est un tableau et une barre d'un élément valide; sinon, et si foo est un objet, vérifiez que la barre est une propriété valide; sinon, et si foo est un objet, vérifiez que la barre est une méthode valide (même si la barre est la constructeur - Utilisez __Construction () à la place); sinon, et si foo est un Objet, vérifiez que GetBar est une méthode valide; sinon, et si foo est un Objet, vérifiez que IsBar est une méthode valide; Sinon, renvoyez un null valeur. FOO ['BAR'] D'autre part ne fonctionne que avec des tableaux PHP:
Vérifiez si FOO est un tableau et une barre d'un élément valide; sinon, renvoyez un valeur null.
Bien que je puisse accéder à l'attribut utilisateur via $ codes [0] -> Utilisateur, pourquoi ne peut pas accéder à l'attribut utilisateur dans le fichier Twig Modèles?
La solution
Merci à Greuut, j'ai résolu le problème.J'ai remplacé la fonction __isset dans lib / model.php dans phpacTiverecord.
/**
* Determines if an attribute exists for this {@link Model}.
*
* @param string $attribute_name
* @return boolean
*/
public function __isset($name)
{
// check for getter
if (method_exists($this, "get_$name"))
{
$name = "get_$name";
$value = $this->$name();
return $value;
}
return $this->read_attribute($name);
}