Я относительно новичок в 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);
// ....
Это своего рода повторяющиеся и не очень эффективные, поскольку каждый класс необходимо создавать каждый раз, когда запрашивается конечная точка.
Необходим глобальный базовый контроллер.
Просматривая документы Symfony и сообщения stackoverflow, похоже, что я могу создать базовый контроллер и иметь все остальные мои контроллеры extend
это так:
class Fetch extends BaseController {
//.....
И все методыв BaseController
будет доступно в Fetch
.Кроме того, в BaseController
я могу запускать перехватчики, которые будут работать глобально (пока все мои контроллеры расширяются BaseController
.
. Я также натолкнулся на эту статью документации Symfony , описывающую реализациюФильтры «До и После», которые подключаются ко всем запросам.
Какой метод (BaseController / До и После фильтров) будет наиболее подходящим для того, что фактически представляет собой некоторый код, который я хочу выполнять глобально каждый раз, когда выполняется запрос ипочему?