gpt4 book ai didi

symfony - this->getUser() 验证表单后返回 null

转载 作者:行者123 更新时间:2023-12-03 18:03:14 26 4
gpt4 key购买 nike

我正在构建一个基于谁登录的自定义选项的表单。
目标是发送邀请。

您可以发送的邀请类型由 getIsRefFrom() 方法决定(该方法可用于“用户”对象。)

这是我的 Controller

<?php

namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use AppBundle\Entity\Invitation;
use AppBundle\Form\InvitationType;
use AppBundle\Entity\User;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;

/**
* Invitation controller.
*
* @Route("/private/invitation")
*/
class InvitationController extends Controller
{
...
public function newAction(Request $request)
{

$invitation = new Invitation();
$user = $this->getUser();
$userStruct = $user->getIsRefFrom();
$form = $this->createForm('AppBundle\Form\InvitationType', $invitation, array('userStruct' => $userStruct));

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {

return new Response("<body>Hi</body>");

}

return $this->render('invitation/new.html.twig', array(
'invitation' => $invitation,
'form' => $form->createView(),
));
}

...
}

这是我的表格类型
<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;

class InvitationType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{

$builder
//showing content of userStruct in a select field
->add('structure', EntityType::class, array(
'label' => 'Structure:',
'class' => 'AppBundle:Structure',
'choices' => $options['userStruct'],
'placeholder' => 'Faites un choix',
'property' => 'libelle',
'mapped' => false
))


->add('destinataire');
}

/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Invitation',
'userStruct' => 'AppBundle\Entity\Structure',
));
}
}

表单显示OK,$this->getUser()返回我的用户,$user->getIsRefFrom()的内容正确显示在表单中。

此外,调试工具栏指示我已正确登录,因为我填写了表格。

但是当我验证提交表单时,我收到一条错误消息“错误:在 null 上调用成员函数 getIsRefFrom() ”,因为显然 $this->getUser();现在为空。

调试工具栏现在指示 n/a(未登录,没有安全上下文...)

看起来安全上下文此时不可用。

更多信息 :
  • 我使用 be_simple_sso_auth(cas auth 包)。
  • 我只有一个防火墙 (derriere_CAS),它覆盖了整个应用程序,除了通过 ACL 启用的登录页面(参见下面的 security.yml)
  • 身份验证工作正常。

  • 这是我的 security.yml
    security:
    encoders:
    AppBundle\Entity\User:
    algorithm: bcrypt

    role_hierarchy:
    ROLE_ADMIN: [ROLE_USER]

    providers:
    users:
    entity: {class: AppBundle\Entity\User, property: username }



    firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
    pattern: ^/(_(profiler|wdt)|css|images|js)/
    security: false

    derriere_CAS:
    methods: GET
    pattern: ^/
    anonymous: ~
    trusted_sso:
    manager: connect_sso
    login_path: /private/login/
    check_path: /private/login/check
    login_action: false
    logout_action: false
    create_users: true
    created_users_roles: [ 'ROLE_USER' ]
    failure_path: /erreur_identification
    logout:
    path: /logout_sso
    target: /

    access_control:
    - { path: ^/private/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: IS_AUTHENTICATED_FULLY }

    也许我做错了什么。
    我将不胜感激任何帮助或想法。
    谢谢你。

    最佳答案

    所以我终于找到了,如果不是答案,至少是一个解决方案。

    首先,我在这里的逻辑(在将它发送到我的表单构建器之前根据登录 Controller 的人计算字段值)似乎不太好。

    正确的方法是这样的:http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-form-events-user-data

    但即便如此,我的问题仍然存在:提交表单后,我的用户仍未通过身份验证。

    我最终从 BeSimpleSsoAuthBundle 切换到更简单的(具有讽刺意味的)CasAuthBundle现在一切正常。

    感谢那些试图帮助我的人。

    关于symfony - this->getUser() 验证表单后返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574752/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com