【问题标题】:Is it okay to have class level variables in Symfony controller class?Symfony 控制器类中可以有类级别的变量吗?
【发布时间】:2012-09-02 02:13:38
【问题描述】:

我有一个使用 Symfony 框架的项目。出于优化目的,我缩小了 6 个在请求期间不断使用的常见变量。其中一些变量在数据库中。

现在,一次又一次地返回数据库 5 次,得到相同的值是不好的做法。所以,我想把这些变量值存储到类级变量中。

这是一个好习惯吗?

class MyController extends Controller
{

    /*Class level variables to eliminate repetitive object creation.*/
    protected $doctrine;

【问题讨论】:

  • 这不是“类级变量”(又名静态变量)。它是一个实例变量。
  • 您想在哪里/如何共享这些变量?

标签: php model-view-controller symfony frameworks


【解决方案1】:

当然这是一个好习惯。唯一非常轻微的缺点是,如果从将其分配给类变量到再次访问它时,数据库中的值以某种方式发生了变化。但机会相当渺茫

【讨论】:

    【解决方案2】:

    你可以做的是在你的控制器和 symfony 的基本控制器之间创建另一个extends。像这样:

    class YourController extends ApplicationController
    
    class ApplicationController extends Controller
    

    ApplicationController 可以有这样的方法:

    /**
    * @var User
    */
    protected  $loggedUser = false ;
    protected function getLoggedUserOrNull()
    {
        if ( $this->loggedUser === false )
            $this->loggedUser =  $this->get("security.context")->getToken()->getUser() ;
        return $this->loggedUser ;
    }
    

    此示例显示已登录用户的实例已“缓存”;这就是你需要的吗?您可以将相同的想法用于您经常需要的其他事情。

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 2014-09-04
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多