Symfony 基本控制器与过滤器之前和之后
Symfony Base Controller vs. Before and After Filters
我是 Symfony(第 4 版)的新手,使用该框架构建了一个 REST API。
我有几个控制器对应于许多使用公共服务的端点。一项服务对每个控制器都是通用的。
目前我正在将这些服务手动注入到每个控制器中。
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use App\Services\Utilities;
use App\Services\Database;
use App\Services\Session;
use App\Services\Rest;
class Fetch extends Controller {
protected $API;
protected $DB;
protected $u;
public function init() {
$this->API = new Rest();
$this->DB = new Database();
$this->u = new Utilities();
$this->API->init();
$this->DB->init($this->DB->default_credentials);
// ....
它有点重复而且效率不高,因为每次请求端点时都需要实例化每个 class。
需要一个全球基地控制器。
浏览了 Symfony 文档和 Whosebug 帖子后,看起来我可以创建一个基本控制器并让我的所有其他控制器 extend
像这样:
class Fetch extends BaseController {
//.....
并且 BaseController
中的所有方法都将在 Fetch
中可用。此外,我可以在 BaseController
中 运行 挂钩,这将 运行 全局(只要我所有的控制器扩展 BaseController
。
我也遇到了 this symfony docs article 描述 "Before and After Filters" 的实现,它挂接到所有请求。
哪种方法(BaseController / Before and After Filters)最适合我想要在每次发出请求时全局 运行 的有效代码,为什么?
Before 和 After 应该比 BaseController 模型更好,原因如下:
假设,您编写了 10 个控制器 class,它扩展了 BaseController class 并且 BaseController class 启动了 5 个服务。每个控制器 class 可能不需要所有 5 项服务的可能性非常高。这将是所有 10 个控制器的开销 classes.
因此,如果您实施 Before/After 过滤器,您可以定义哪个控制器正在执行并启动该控制器需要的服务。
我是 Symfony(第 4 版)的新手,使用该框架构建了一个 REST API。
我有几个控制器对应于许多使用公共服务的端点。一项服务对每个控制器都是通用的。
目前我正在将这些服务手动注入到每个控制器中。
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use App\Services\Utilities;
use App\Services\Database;
use App\Services\Session;
use App\Services\Rest;
class Fetch extends Controller {
protected $API;
protected $DB;
protected $u;
public function init() {
$this->API = new Rest();
$this->DB = new Database();
$this->u = new Utilities();
$this->API->init();
$this->DB->init($this->DB->default_credentials);
// ....
它有点重复而且效率不高,因为每次请求端点时都需要实例化每个 class。
需要一个全球基地控制器。
浏览了 Symfony 文档和 Whosebug 帖子后,看起来我可以创建一个基本控制器并让我的所有其他控制器 extend
像这样:
class Fetch extends BaseController {
//.....
并且 BaseController
中的所有方法都将在 Fetch
中可用。此外,我可以在 BaseController
中 运行 挂钩,这将 运行 全局(只要我所有的控制器扩展 BaseController
。
我也遇到了 this symfony docs article 描述 "Before and After Filters" 的实现,它挂接到所有请求。
哪种方法(BaseController / Before and After Filters)最适合我想要在每次发出请求时全局 运行 的有效代码,为什么?
Before 和 After 应该比 BaseController 模型更好,原因如下:
假设,您编写了 10 个控制器 class,它扩展了 BaseController class 并且 BaseController class 启动了 5 个服务。每个控制器 class 可能不需要所有 5 项服务的可能性非常高。这将是所有 10 个控制器的开销 classes.
因此,如果您实施 Before/After 过滤器,您可以定义哪个控制器正在执行并启动该控制器需要的服务。