小编red*_*nax的帖子

在Symfony 2控制器中抽象常用功能的正确方法是什么

我们有一个相当大的symfony2代码库.通常我们的Controller操作看起来像

public function landingPageAction(Request $request) {
 //do stuff      
 return $this->render("view_to_render", $template_data);
}
Run Code Online (Sandbox Code Playgroud)

我们在所有控制器之间都有两个非常通用的功能:

  1. 我们倾向于将控制器级模板参数传递给特定控制器中的所有操作 - 让我们称之为"默认参数"
  2. 我们在每个Action的末尾设置HTTP缓存头

可以理解的是,我们希望将这种逻辑抽象出来.在这样做时,我们提出了两种方法.我们不确定哪种方法在一般OO和SOLID原则方面更好,而且在性能方面以及SF2如何建议完成方面.

两种方法都依赖于让控制器扩展一个接口,指示控制器是否具有"默认参数"(后来我们也在考虑添加Cacheable接口)

use Symfony\Component\HttpFoundation\Request;
interface InjectDefaultTemplateVariablesController {
public function getDefaultTemplateVariables(Request $request);
}
Run Code Online (Sandbox Code Playgroud)

方法1

这种方法基于事件.我们定义了一个对象,它将存储我们的模板变量,以及(将来)缓存指标

class TemplateVariables {

protected $template_name;

protected $template_data;

public function __construct($template_name, $template_data) {
    $this->template_name = $template_name;
    $this->template_data = $template_data;
}

/**
 * @param mixed $template_data
 * @return $this
 */
public function setTemplateData($template_data) {
    $this->template_data = $template_data;

    return $this;
}

/**
 * @return mixed
 */
public function getTemplateData() {
    return $this->template_data; …
Run Code Online (Sandbox Code Playgroud)

php symfony

7
推荐指数
1
解决办法
749
查看次数

标签 统计

php ×1

symfony ×1