我需要在每次操作之前调用位于app / lib目录中的类中的函数(即在preExecute操作中)
在该函数中,我需要一个来自动作的$this
指针。
我可以以静态方式执行此操作 - Classname::functionname()
,但这会导致PHP警告,我想避免这种情况。
现在我用
处理它ini_set('display_errors', '0'); # don't show any errors...
error_reporting(E_ALL | E_STRICT); # ...but do log them
但这是一种丑陋的方式..
我怎样才能以动态的方式做到这一点?
===============
编辑:
按要求 - 我添加了一个代码来显示我实际使用$this
指针
...
$c = new Criteria();
$c->add(ArticlePeer::PUBLISHED, true);
$articles = ArticlePeer::doSelect($c);
$this->articles = $articles;
...
是的,我知道我可以在每个模块中将此选择放在preExecute操作中,它将正常工作。但是 - 我有很多模块,因为我有一组对所有这些模块都一样的动作,所以将它们放在一个程序中并且只调用那个函数将是最聪明的方法...... 特别是在维护应用程序时 - 它只是一个改变代码的地方,而不是十几个......
答案 0 :(得分:1)
在app/lib
文件夹中的班级中,您只需返回$articles
:
$c = new Criteria();
$c->add(ArticlePeer::PUBLISHED, true);
return ArticlePeer::doSelect($c);
然后,在preExecute()
:
public function preExecute()
{
$this->articles = Classname::functionname();
}
如果必须返回多个值,可以使用数组:
$c = new Criteria();
$c->add(ArticlePeer::PUBLISHED, true);
$articles = ArticlePeer::doSelect($c);
$c = new Criteria();
$c->add(BookPeer::PUBLISHED, true);
$books = BookPeer::doSelect($c);
return array(
'articles' => $articles,
'books' => $books,
);
然后,使用此数组在您的操作中填充变量:
public function preExecute()
{
$data = Classname::functionname();
$this->articles = $data['articles'];
$this->books = $data['books'];
}
答案 1 :(得分:0)
您无法在方法中更改$this
的值。从不。
相反,请查看课程如何从外部访问$articles
,应该有getArticles()
之类的内容。看起来这个类是Propel模型,那些已经产生了这样的吸气剂。
根据您的最终目标,可能有更好的解决方案,而不是实例化此模型,调用神秘方法然后获取属性。毕竟,类不仅仅是函数的集合,不应该被这样对待。不重复代码是好的,但必须在某种意义上完成。