Php symfony test app.user在twig中为空
我在twig中使用app.user。当我编写测试时,我有一个用户登录,它在控制器中工作正常。但在twig中,当访问app.user时,它是空的 以下是我如何在测试单元中记录用户:Php symfony test app.user在twig中为空,php,symfony,twig,Php,Symfony,Twig,我在twig中使用app.user。当我编写测试时,我有一个用户登录,它在控制器中工作正常。但在twig中,当访问app.user时,它是空的 以下是我如何在测试单元中记录用户: $user = new User; $user->setRole('ROLE_ADMIN'); $user->setUsername('admin'); $firewallContext = 'main'; $token = new UsernamePasswordT
$user = new User;
$user->setRole('ROLE_ADMIN');
$user->setUsername('admin');
$firewallContext = 'main';
$token = new UsernamePasswordToken(serialize($user), null, $firewallContext, array('ROLE_ADMIN'));
$session->set('_security_'.$firewallContext, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
要让它在twig中工作,我还缺少什么?我在正确登录时遇到了类似的问题。最终,我解决了这个问题的方法是更改我的登录方式,这是我的授权客户,您可以根据自己的目的对其进行调整。symfony版本:2.8
private function createAuthorizedClient()
{
$client = static::createClient();
$container = static::$kernel->getContainer();
$session = $container->get('session');
$token = new UsernamePasswordToken('john.doe', null, 'main', array('ROLE_ADMIN'));
$session->set('_security_main', serialize($token));
$session->save();
$client->getCookieJar()->set(new Cookie($session->getName(), $session->getId()));
return $client;
}
我在正确登录时遇到了一个类似的问题,最终解决的办法是改变我的登录方式,这是我的授权客户,您可以根据自己的目的对其进行调整。symfony版本:2.8
private function createAuthorizedClient()
{
$client = static::createClient();
$container = static::$kernel->getContainer();
$session = $container->get('session');
$token = new UsernamePasswordToken('john.doe', null, 'main', array('ROLE_ADMIN'));
$session->set('_security_main', serialize($token));
$session->save();
$client->getCookieJar()->set(new Cookie($session->getName(), $session->getId()));
return $client;
}
我无法告诉您如何在测试环境中设置Twig以提供app.user,但我已经做了一个变通方法,以获得几乎相同的功能 简言之: 创建一个细枝扩展以获取细枝模板中的当前用户,如get_user。 get_user:它检查它是否在APP_ENV==test中运行。如果是,则它从UsernamePasswordToken实例获取用户实例,否则它将从当前Twig环境实例返回存储的用户。 对于Symfony 4.3+,下面的代码应该是开箱即用的,但未经测试 App/TwigExtensions/SecurityExtension.php 以下扩展提供了在细枝模板中获取用户
我无法告诉您如何在测试环境中设置Twig以提供app.user,但我已经做了一个变通方法,以获得几乎相同的功能 简言之: 创建一个细枝扩展以获取细枝模板中的当前用户,如get_user。 get_user:它检查它是否在APP_ENV==test中运行。如果是,则它从UsernamePasswordToken实例获取用户实例,否则它将从当前Twig环境实例返回存储的用户。 对于Symfony 4.3+,下面的代码应该是开箱即用的,但未经测试 App/TwigExtensions/SecurityExtension.php 以下扩展提供了在细枝模板中获取用户
请复制控制器的全部功能。。。此代码中没有渲染。这是控制器中渲染所在的部分。上述代码位于测试单元中。代码返回$this->render'admin/listeUsiateurs.html.twig',数组'users'=>$users',roles'=>$tab',equipes'=>$equipes;代码在控制器中,您将用户作为参数传递给您的细枝视图,而不是应用程序。所以做app.user是行不通的。app未定义,因此不存在于tour twig视图中。不,app变量作为全局变量存在于twig中,并且它正在工作。只有在测试中,此变量app.user为null。登录的用户未设置为会话,因为序列化未计算所有必需的字段。请复制控制器的完整功能。。。此代码中没有渲染。这是控制器中渲染所在的部分。上述代码位于测试单元中。代码返回$this->render'admin/listeUsiateurs.html.twig',数组'users'=>$users',roles'=>$tab',equipes'=>$equipes;代码在控制器中,您将用户作为参数传递给您的细枝视图,而不是应用程序。所以做app.user是行不通的。app未定义,因此不存在于tour twig视图中。不,app变量作为全局变量存在于twig中,并且它正在工作。只有在测试中,此变量app.user为null。登录的用户未设置为会话,因为序列化没有计算所有必需的字段。谢谢,这与我所做的大致相同,但我还是尝试了。同样的结果是,它在控制器中运行良好,但在app.user的twig中不起作用。谢谢,这与我的大致相同,但我还是尝试了。同样的结果是,它可以在控制器中正常工作,但在app.user的twig中却不行。下行投票者会如此善良并给出理由吗?下行投票者会如此善良并给出理由吗?