Как настроить приложение php symfony4 в подпапке сайта (проблема с маршрутизацией) - PullRequest
0 голосов
/ 28 января 2019

Мне нужно настроить приложение Symfony внутри подпапки размещенного домена.Приложение регистрирует некоторый маршрут, например /hello.

Структура каталогов:

/ (http root)
/myapp (symfony app)
/myapp/.htaccess (invisible redirect)
/myapp/public 
/myapp/src
/myapp/vendor
/myapp/...

С помощью перезаписи мода Apache я перенаправляю все URL-адреса с www.mysite.test/myapp/... на www.mysite.test/myapp/public/...,

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(.*)$ myapp/public/$1 [L]
</IfModule>

Затем, когда я просматриваю URL www.mysite.test/myapp/hello, приложение не возвращает маршрут для myapp/hello.

Существует способ смонтировать все маршруты с пользовательским префиксом для решения этой проблемы.?Таким образом, контроллеры могут обрабатывать все URL с префиксом /myapp, а также сгенерированный маршрутом URL имеет этот префикс.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

возможно я нашел решение для ошибки маршрута не найден.

  • Я определяю параметр app.web_root_prefix в service.yaml с префиксом url.
  • Я изменяю определениеKernel :: loadRoutes на Kernel.php:
    class Kernel extends BaseKernel
    {
        use MicroKernelTrait {
            loadRoutes as _loadRoutes;
        }

        // [omitted code]

        public function loadRoutes(LoaderInterface $loader)
        {
            $r = $this->_loadRoutes($loader);

            $prefix = $this->getContainer()->getParameter('app.web_root_prefix');
            if (!empty($prefix)) {

            /** @var Route $route */
            foreach ($r->getIterator() as $route) {
                $path = $route->getPath();
                if (strpos($path, $prefix) !== 0 && empty(array_diff($route->getSchemes(), array('http', 'https', 'ftp')))) {
                    // Add the prefix only if it is not already there.
                    $route->setPath('/'.$prefix.$path);
                }
            }

            // $r->addPrefix($prefix);
            }
            return $r;
        }
    }

В этом режиме все маршруты, загруженные из файла .yaml, имеют префикс правильно.Также вы должны изменить все пути в security.yaml, вставив префикс %app.web_root_prefix%.

Я должен сделать еще тест ...

0 голосов
/ 28 января 2019

Я получил эту ошибку несколько месяцев назад и решил ее.

Вот моя ветка об этой же проблеме

Надеюсь, что она может вам помочь.Если у вас есть вопросы по поводу моих ответов, не стесняйтесь спрашивать.

...