Возврат перенаправления из дочерней функции - PullRequest
0 голосов
/ 23 июня 2019

Я работаю над проектом Symfony.Он имеет настраиваемые элементы управления доступом (которые динамически создаются и хранятся в базе данных). Поэтому я создал собственный класс BaseController, который позволяет мне выполнять однострочный вызов для проверки доступа.Вот часть этого кода:

class BaseController extends AbstractController
{
    function prepare($customer, $product, $right) {
        // These are all defined in the class.  
        $this->loadCompany($customer);
        $this->canAccessProduct($product);
        $this->checkAccessRights($customer, $product, $right);
    }
}

Метод prepare вызывается в верхней части каждого контроллера.Например:

class IndexController extends BaseController {
   /**
     * @Route("/{customer}/download",
     *     name="download_home")
     */
    function customerIndex($customer)
    {
        $this->prepare($customer, "download", "read");
    }
}

Теперь вот изменение, которое я хочу сделать: я хочу удалить {customer} из маршрута и вместо этого загрузить его как часть вызова функции "prepare".Поэтому я хочу сохранить клиента в переменной сеанса.Если переменная сеанса не установлена, я хочу перенаправить на другой контроллер.Это достигается в Symfony с помощью return $this->redirectToRoute("app_company_select").Так можно ли настроить его так, чтобы в $this->prepare() был возвращен вызов, который также возвращает функцию контроллера?

Я попытался parent::return(), но это дает неизвестную ошибку функции.Есть ли другой способ сделать это?

1 Ответ

1 голос
/ 24 июня 2019

Тогда просто перенаправьте прямо с того места, где вы находитесь. Если вы еще не отправили заголовки, это должно работать нормально.

public function prepare(...)
{
    $hasAccess = false
    // Check for access
    if(!$hasAccess){
        (new RedirectResponse('/go/somewhere'))->send();
        exit;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...