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?

Était-ce utile?

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);
    }

https://github.com/kla/php-acterecord/issues/156

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top