Используйте HTTPS в качестве схемы для всех маршрутов (Symfony 7 и EasyAdmin Bundle)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Используйте HTTPS в качестве схемы для всех маршрутов (Symfony 7 и EasyAdmin Bundle)

Сообщение Anonymous »

Я использую Symfony 7.1 и EasyAdminBundle для перечисления сущностей в виде таблиц и их фильтрации.
Я развернул все приложение в Heroku, и оно работает абсолютно нормально.
< Strong>Единственная проблема:
Некоторые URL-маршруты генерируются по схеме «https», другие по схеме «http».
Явно: Ссылки на CrudControllers имеют «https», но некоторые запросы, которые обрабатываются через javascript, имеют «http».
Например, если я использую CrodController и определяю фильтр, этот URL-адрес фильтра (

Код: Выделить всё

...?crudAction=renderFilters ...
) генерируется по схеме «http»:

Код: Выделить всё

http://my-app.herokuapp.com/admin?crudAction=renderFilters&crudControllerFqcn...
Это вызывает ошибку CORS, то есть запрос не выполняется из-за политики строгого происхождения при перекрестном происхождении
Что я пробовал до сих пор...
  • Установите следующее в файле config/packages/routing.yaml ( и конфигурация/

    Код: Выделить всё

    parameters:
    router:
    request_context.scheme: https
    
  • Пытался изменить настройку в config/packages/security.yaml, описано здесь: https://symfony.com/ doc/current/security/force_https.html
  • Пытался изменить config/routes.yaml на:

    Код: Выделить всё

    controllers:
    resource:
    path: ../src/Controller/
    namespace: App\Controller
    type: attribute
    schemes: [https] # this last line is added
    
    Но это приводит только к тому, что приложение все время перенаправляется на один и тот же URL-адрес. Затем маршруты ломаются. (слишком много перенаправлений)
Ну, ни один из них не сработал.
Так что я действительно застрял по этой проблеме.
Единственная идея, которая пришла мне в голову во время отладки, заключалась в следующем: создать патч для EasyAdmin Bundle, изменив следующий файл:

Код: Выделить всё

file: EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator

// line: 309 ...

$urlType = null !== $context && false === $context->getAbsoluteUrls() ? UrlGeneratorInterface::RELATIVE_PATH : UrlGeneratorInterface::ABSOLUTE_URL;

// added line:
$this->urlGenerator->getContext()->setScheme('https');

$url = $this->urlGenerator->generate($this->dashboardRoute, $routeParameters, $urlType);
Это действительно работает, но, на мой взгляд, это не самое лучшее решение.

Подробнее здесь: https://stackoverflow.com/questions/791 ... min-bundle
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»