在symfony 1.4中调用一个函数

时间:2013-02-22 09:02:48

标签: php symfony-1.4

我需要在每次操作之前调用位于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操作中,它将正常工作。但是 - 我有很多模块,因为我有一组对所有这些模块都一样的动作,所以将它们放在一个程序中并且只调用那个函数将是最聪明的方法...... 特别是在维护应用程序时 - 它只是一个改变代码的地方,而不是十几个......

2 个答案:

答案 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模型,那些已经产生了这样的吸气剂。

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