Symfony: проблема с маршрутизацией

Я новичок в Symfony, я следую учебнику, части о безопасности и управлении пользователями, но я застрял с проблемой, которая, кажется, возникла из-за моей маршрутизации.

Я только что создал форму входа, которая на самом деле работает, когда я захожу /app_dev.php/login, появляется форма, я могу ее заполнить, но когда я отправляю ее, я получаю следующую ошибку:

No route found for "GET /" (from "http://dev-05/ANTOINE/Symfony/web/app_dev.php/login")
404 Not Found - NotFoundHttpException
1 linked Exception:
ResourceNotFoundException » 

После получения этой ошибки, если я вернусь на домашнюю страницу, я увижу, что я подключен, поэтому он работает, но перенаправление не работает.

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

Вот моя форма, файлы security.yml и routing.yml:

{% extends "AKMUserBundle::layout.html.twig" %}

{% block akmuser_body %}

{% if error %}
    <div class="alert alert-danger">{{ error.message }}</div>
{% endif %}

<form action="{{ path('login_check') }}" method="post">
    <label for="username">Login : </label>
    <input type="text" id="username" name="_username" value="{{ last_username }}" />

    <label for="password">Mot de passe :</label>
    <input type="password" id="password" name="_password" />
    <br />
    <input type="submit" value="Connexion" />
</form>

{% endblock %}

безопасность.yml :

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        in_memory:
            memory: 
                users:
                    user: { password: userpass, roles: ['ROLE_USER'] }
                    admin: { password: adminpass, roles: ['ROLE_ADMIN'] }

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            form_login:
                login_path: login
                check_path: login_check
            logout:
                path: logout
                target: /platform

маршрутизация.yml:

akm_platform:
resource: "@AKMPlatformBundle/Resources/config/routing.yml"
prefix:   /platform

login:
    path: /login
    defaults:
        _controller: AKMUserBundle:Security:login

login_check:
    path: /login_check

logout:
    path: /logout

Я знаю, что файлы .yml очень чувствительны и требуют 4 пробела вместо обычного отступа, поэтому я переписал файлы построчно, с пробелами, но это все равно не работает.

Я надеюсь, что кто-то может мне помочь: p Если вам нужна информация, не стесняйтесь!

Изменить: вот мой результат php bin/console debug:router php bin/console debug:router

Редактировать 2: Чтобы избавиться от моей проблемы, мне просто нужно было добавить default_target_path в мой security.yml:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        in_memory:
            memory: 
                users:
                    user: { password: userpass, roles: ['ROLE_USER'] }
                    admin: { password: adminpass, roles: ['ROLE_ADMIN'] }

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            form_login:
                login_path: login
                check_path: login_check
                default_target_path: akm_platform_home
            logout:
                path: logout
                target: /platform

person AKMMM    schedule 14.04.2017    source источник
comment
В браузере просмотрите источник формы входа и убедитесь, что метод POST и действие /login_check. Сообщение об ошибке подразумевает, что у вас есть GET / (не по теме: yaml не требует 4 пробела, просто нужно быть последовательным).   -  person Cerad    schedule 14.04.2017
comment
Первый — создать виртуальный хост, который указывает на каталог /web вашего проекта. /маршрут работает? dev-05/ANTOINE/Symfony/web/app_dev.php   -  person COil    schedule 14.04.2017
comment
Я отредактировал свой пост, чтобы вы могли видеть мою форму, мне кажется, все в порядке. Что касается маршрутов, если я попытаюсь перейти к /web/app_dev.php, это не сработает, но с / в конце все работает нормально. Как вы думаете, проблема здесь?   -  person AKMMM    schedule 14.04.2017


Ответы (1)


Обновите кеш, консольная команда: php bin/console cache:clear, если вы используете более старый symfony, это приложение/консоль вместо bin/console. Вы можете отладить свои маршруты с помощью команды: php bin/console debug:router. Это основная системная консоль, и в моем случае я использую ее в Windows. Вы должны быть в папке проекта, чтобы они работали.

Я не уверен, где вы перенаправляетесь на «/», я недавно начал работать в Symfony, и большинство проблем было с обновлением кеша и неправильными именами yml и маршрутов. Однако в вашем случае может случиться так, что symfony переходит к маршруту / при успешном входе в систему, вы можете добавить default_target_path: your_homepage_route_name or /where_you_want_to_go , возможно, в этом проблема.

Поскольку вы новичок, когда вы включаете маршруты и определяете для них префикс, вы можете легко забыть, что вы его установили, поэтому отладка маршрутизатора великолепна, поскольку вы можете очень легко увидеть всю информацию. При работе в symfony всегда держите открытым окно консоли, если вы не работаете в редакторе со встроенной консолью. Я думаю, что в JetBeans он есть, все эти туториалы сделаны в нем. PS, обучающие программы на YouTube по Symfony великолепны, например, на канале Symfony и PHP Programming есть хороший учебник для начинающих.

person Marko Živković    schedule 14.04.2017
comment
Я уже обновлял кеш, на всякий случай сделал еще раз, ничего не поменял. Добавляю результаты php bin/console debug:router в исходный пост, как я вижу, вроде все нормально - person AKMMM; 14.04.2017
comment
Ммм, интересно. Вы пытались установить целевой путь по умолчанию, я отредактировал свой пост с информацией о нем, также не забудьте сохранить любые изменения, которые вы сделали в своем редакторе, я уже был на этом пути раньше :) - person Marko Živković; 14.04.2017
comment
Хорошо, я прочитал документацию Symfony по link и кажется, что вы всегда перенаправляетесь на успешный вход в систему, поскольку вы не определили целевой путь по умолчанию, он пытается перенаправить вас на запрошенный маршрут, который является /login, и поскольку вы уже там, куда он, вероятно, пытается перейти, / который определен в самом скелетном приложении, но вы, вероятно, изменили его или удалили контроллер AppBundle по умолчанию. - person Marko Živković; 14.04.2017
comment
Спасибо, это было так, я просто добавил default_target_path в свой form_login (security.yml), и он отлично работает! :D - person AKMMM; 14.04.2017
comment
Ах, милая, рад, что смог помочь. Посмотрите туториалы на youtube по symfony, они могут немного помочь, и не забывайте, что кеш производственной среды нужно очищать отдельно. Я переключился на prod и потерял часы на глупой странице hello world, стуча головой о стол и придумывая, что не так. Кроме того, если в validation.yml есть ошибка, вы скоро узнаете об этом, вы также можете увидеть эти ошибки, когда обновляете свой кеш, иногда, в других случаях это потребует старого доброго удара головой об стол. Я ненавижу отлаживать YML - person Marko Živković; 14.04.2017
comment
Я пойду проверю на YouTube, если вы скажете, что есть отличные туториалы :p Symfony выглядит очень мощным, но ему нужно некоторое время, чтобы привыкнуть к нему :p И да, файл yml уже немного свел меня с ума - person AKMMM; 14.04.2017