Я пытаюсь настроить пользователей в проекте, но я получаю ошибки из-за пути входа в систему. Это похоже на проблему с пробелами, но я попытался с php файлом, и ошибка такая же.
FileLoaderLoadException: файл маршрутизации "/Applications/MAMP/htdocs/Symfony/app/config/routing.yml" содержит неподдерживаемые ключи для "входа": "шаблон". Ожидаемый один из: "ресурс", "тип", "префикс", "путь", "хост", "схемы", "методы", "значения по умолчанию", "требования", "параметры", "условие" в/приложения /MAMP/htdocs/Symfony/app/config/routing.yml (который импортируется из "/Applications/MAMP/htdocs/Symfony/app/config/routing_dev.yml").
Код в app/config был:
login:
pattern: /login
defaults: { _controller: OCUserBundle:Security:login }
РЕДАКТИРОВАТЬ:
Поэтому я получаю ту же ошибку с новым проектом.
Вот что я делаю:
-Create 2 пакета (MGeneralBundle, MUserBundle) внутри "Me", пространство имен моего проекта.
-In app/config/routing.yml:
me_m_general:
resource: "@MeMGeneralBundle/Resources/config/routing.yml"
prefix: /
login:
path: /login
defaults: { _controller: MeMUserBundle:Security:login}
login_check:
path: /login_check
logout:
path: /logout
И в app/config/security.yml:
security:
in_memory:
memory: ~
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main_login:
# Cette expression régulière permet de prendre /login (mais pas /login_check !)
pattern: ^/login$
anonymous: true
main:
pattern: ^/
anonymous: false
provider: in_memory
form_login:
login_path: login
check_path: login_check
logout:
path: logout
target: /
И контроллер для входа, с routing.yml в UserBundle:
me_home:
path: /
defaults: { _controller: MeMUserBundle:Default:index }
<?php
namespace Me\MUserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\SecurityContext;
class SecurityController extends Controller
{
public function loginAction(Request $request)
{
if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
return $this->redirectToRoute('me_home');
}
$authenticationUtils = $this->get('security.authentication_utils');
return $this->render('MeMUserBundle:Security:login.html.twig', array(
'last_username' => $authenticationUtils->getLastUsername(),
'error' => $authenticationUtils->getLastAuthenticationError(),
));
}
}
Ошибка:
Вы запросили несуществующий сервис "security.context".
по адресу: http://localhost: 8888/Me/web/app_dev.php/login.
Я не знаю, как отладить это.
Служба security.context
устарела в версии 2.6 и полностью удалена в версии 3.0. Вместо этого вы хотите использовать security.authorization_checker
:
if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
Фактически, Symfony 2.6 также ввел новые ярлыки контроллера, поэтому вам даже не нужно явно обращаться к этой службе. Это выглядит чище и будет работать так же хорошо в вашем контроллере:
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
pattern
устарел и удаляется довольно долго - просто замените его наpath
.