Не могу получить доступ к контроллеру Symfony @Route - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в Symfony (использую версию 3.4). И я использую его с XAMPP на macOS High Sierra. Я установил мои vhosts как это:

<VirtualHost *:80>
   DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/project/web/app_dev.php"
   ServerName project
</VirtualHost>

И установите мой файл hosts с "127.0.0.1 project", и это прекрасно работает.

Но затем в своем приложении я создал контроллер:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class ProjectController extends Controller
{ 
    /**
    * @Route("/todo", name="todo_list")
    */
    public function indexAction(Request $request)
    {
        die("TO DOS");
        // replace this example code with whatever you need
        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this- 
            >getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
         ]);
    }
}

но когда я получаю доступ к project / todo, он перенаправляет на project / dashboard и показывает страницу приветствия XAMPP. Как я могу пойти в проект / todo?

ПРИМЕЧАНИЕ: хотя я использую Mac, я делаю этот урок https://www.youtube.com/watch?v=HchMW8EhWPU

Ответы [ 2 ]

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

Ваш корень документа неверен. Корень документа всегда должен быть каталогом. Таким образом, корень вашего документа должен быть:

DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/project/web/"

Далее: вы хотите, чтобы все запросы проходили через app_dev.php. Это достигается с помощью правил перезаписи . Правила перезаписи отображают запрос клиента на реальный ресурс, в вашем случае app_dev.php front controller.

Вот набор правил перезаписи, которые должны работать для вас. (В настоящее время я не использую Apache, поэтому выкопал их из унаследованного проекта и надеюсь, что они подойдут вам.) Поместите это в файл .htaccess в каталог web/:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app_dev.php [QSA,L]
</IfModule>

Это базовый набор правил, в основном это означает, что веб-сервер должен переписать все запросы на несуществующие файлы в app_dev.php.

Вы также можете добавить его в конфигурацию веб-сервера, но затем вам придется перезапускать веб-сервер каждый раз, когда вы изменяете конфигурацию.

Кроме того: Если по какой-либо причине после изменения конфигурации вы получаете ошибки 5хх, посмотрите объяснения в журналах сервера.

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

У меня был ограниченный опыт работы с Apache + Symfony, но я считаю, что ваш DocumentRoot не соответствует действительности. Вы должны указать каталог web вместо вашего prod или dev фронт-контроллера. В целях тестирования просто удалите app_dev.php с самого конца. Это помогло?

На основе вашей версии всегда обращайтесь к официальным документам, например: Настройка веб-сервера

Для отладки ваших маршрутов я предлагаю выполнить bin/console debug:router, чтобы лучше понять ваши зарегистрированные маршруты.

Надеюсь, это немного поможет ...

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