我们有一个相当大的symfony2代码库.通常我们的Controller操作看起来像
public function landingPageAction(Request $request) {
//do stuff
return $this->render("view_to_render", $template_data);
}
Run Code Online (Sandbox Code Playgroud)
我们在所有控制器之间都有两个非常通用的功能:
可以理解的是,我们希望将这种逻辑抽象出来.在这样做时,我们提出了两种方法.我们不确定哪种方法在一般OO和SOLID原则方面更好,而且在性能方面以及SF2如何建议完成方面.
两种方法都依赖于让控制器扩展一个接口,指示控制器是否具有"默认参数"(后来我们也在考虑添加Cacheable接口)
use Symfony\Component\HttpFoundation\Request;
interface InjectDefaultTemplateVariablesController {
public function getDefaultTemplateVariables(Request $request);
}
Run Code Online (Sandbox Code Playgroud)
这种方法基于事件.我们定义了一个对象,它将存储我们的模板变量,以及(将来)缓存指标
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)