0

我需要在每个操作之前调用位于存储在 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;
...

是的,我知道我可以将此 Select 放入每个模块的 preExecute 操作中,它会正常工作。但是 - 我有很多模块,并且因为我有一组对所有这些模块都相同的操作,所以将它们放在一个过程中并调用该函数将是最聪明的方法......尤其是在维护方面该应用程序 - 它只是一个更改代码的地方,而不是十几个......

4

2 回答 2

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'];
}
于 2013-02-22T12:41:01.923 回答
0

您不能更改$this方法中的值。绝不。

相反,看看你如何$articles从外部访问的类,应该有类似getArticles(). 看起来这个类是一个 Propel 模型,那些已经生成了这样的 getter。

根据您的最终目标,可能有比实例化此模型、调用神秘方法然后获取属性更好的解决方案。毕竟,类不仅仅是函数的集合,不应该被这样对待。不重复代码是好的,但必须有某种意义。

于 2013-02-22T12:07:22.920 回答