Базовый контроллер Symfony против фильтров до и после - PullRequest
0 голосов
/ 01 июня 2018

Я относительно новичок в 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 / До и После фильтров) будет наиболее подходящим для того, что фактически представляет собой некоторый код, который я хочу выполнять глобально каждый раз, когда выполняется запрос ипочему?

1 Ответ

0 голосов
/ 02 июня 2018

До и После должно быть лучше, чем модель BaseController, вот почему:

Предположим, вы пишете 10 классов Controller, которые расширяют класс BaseController и класс BaseController инициируют 5 сервисов.очень высока вероятность того, что для каждого класса контроллеров могут не потребоваться все 5 услуг.это приведет к издержкам для всех 10 классов контроллеров.

Итак, если вы реализуете фильтр До / После, вы определяете, какой контроллер выполняет, и запускаете службы, которые требуются для этого контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...