Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php symfony test app.user在twig中为空_Php_Symfony_Twig - Fatal编程技术网

Php symfony test app.user在twig中为空

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

我在twig中使用app.user。当我编写测试时,我有一个用户登录,它在控制器中工作正常。但在twig中,当访问app.user时,它是空的

以下是我如何在测试单元中记录用户:

    $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中却不行。下行投票者会如此善良并给出理由吗?下行投票者会如此善良并给出理由吗?