我无法使用PHPActiveRecord / Twig访问连接表。这是简化的代码。它有两个模型(代码和用户),每个代码属于一个用户,所以我想列出代码名称代码的代码。
// 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);
{% 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 **.
我看到了这个页面: http://twig.sensiolabs.org/doc/templates.html
实施
为方便起见,foo.bar在PHP上执行以下操作 层:
检查foo是否为数组并禁止有效元素;如果没有,如果没有 是一个对象,检查该栏是否是有效的属性;如果没有,如果没有 是一个对象,检查该栏是一个有效的方法(即使栏是 构造函数 - 使用__construct()代替);如果没有,如果foo是一个 对象,检查getBar是否是有效的方法;如果没有,如果foo是一个 对象,检查isBar是否是有效的方法;如果没有,返回null 值。另一方面,foo ['bar']仅适用于PHP数组:
检查foo是否为数组并禁止有效元素;如果没有,请返回 空值。
虽然我可以通过$ codes [0] - > user访问用户属性,为什么我不能在twig模板文件中访问用户属性?
答案 0 :(得分:1)
感谢greut,我解决了这个问题。我在PHPActiveRecord中替换了lib / Model.php中的函数__isset。
/**
* 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);
}