【问题标题】:Symfony - how to lowercase a form field?Symfony - 如何小写表单字段?
【发布时间】:2019-05-08 10:38:57
【问题描述】:

我是使用 Symfony 3.4 的初学者,我想将表单字段更改为小写,但我不知道如何或在哪里 :( 在我的 buildForm 中可能有一个约束或在我的控制器中,但我无法定位表单字段?

我在 Twig 中试过:

<div>{{  form_widget(form.name)|lower  }}</div>

我在 Controller 中试过:

$form->get('name')->setData(strtolower($form->get('name')));

我在 buildForm 中尝试过:

$builder->add('name', TextType::class, ['attr' => array( 'class' => 'text-lowercase' ))

如果您需要查看我的控制器:

public function registerAction(Request $request)
{
    /** @var $formFactory FactoryInterface */
    $formFactory = $this->get('fos_user.registration.form.factory');
    /** @var $userManager UserManagerInterface */
    $userManager = $this->get('fos_user.user_manager');
    /** @var $dispatcher EventDispatcherInterface */
    $dispatcher = $this->get('event_dispatcher');

    $user = new User();
    $user->setEnabled(true);

    $event = new GetResponseUserEvent($user, $request);
    $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);

    if (null !== $event->getResponse()) {
        return $event->getResponse();
    }

    $form = $formFactory->createForm();

    $user->setUsername("null");
    $user->setPassword("null");
    $user->setPlainPassword("null");

    $form->setData($user);

    $form->handleRequest($request);

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

            $user->setPassword(strtolower($form["name"]->getData(). $form["firstname"]->getData()));
            $user->setPlainPassword(strtolower($form["name"]->getData(). $form["firstname"]->getData()));
            $user->setUsername(strtolower($form["name"]->getData().
                                              $form["firstname"]->getData()));

            if($form["roles"]->getData() == 'ROLE_ADMIN')
            {
                $user->addRole('ROLE_ADMIN');
            }
            else
            {
                $user->addRole('ROLE_USER');
            }

            $event = new FormEvent($form, $request);
            $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
            $userManager->updateUser($user);

            /*****************************************************
             * Add new functionality (e.g. log the registration) *
             *****************************************************/
            $this->container->get('logger')->info(
                sprintf("New user registration: %s", $user)
            );

            if (null === $response = $event->getResponse()) {
                $url = $this->generateUrl('fos_user_registration_register');
                $response = new RedirectResponse($url);
            }

             $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));

            return $response;
        }

        $event = new FormEvent($form, $request);
        $dispatcher->dispatch(FOSUserEvents::REGISTRATION_FAILURE, $event);

        if (null !== $response = $event->getResponse()) {
            return $response;
        }
    }

    return $this->render('@FOSUser/Registration/register.html.twig', array(
        'form' => $form->createView(),
    ));
}

感谢您的帮助!

【问题讨论】:

  • 请发布一些您目前已经尝试过的代码。
  • 你想lowercase()字段的名字还是里面的值呢?您是使用带有实体还是带有数组的表单?您可以发布完整的控制器操作吗?
  • 我想将字段的值小写,并使用带有实体用户的表单,因为我使用 FosUser 的 registerController 将用户保存在数据库中。我用我的 registerController 更新

标签: symfony


【解决方案1】:

如果您使用的是引导程序,以下代码应该可以工作:

$builder->add('name', TextType::class, ['attr' => array( 'class' => 'text-lowercase' ))

【讨论】:

  • 只在视图中有效,在Controller和数据库中无效
  • 但是,当您提交此类数据时。它会得到你插入的小写字母。
  • 您可以在您的实体中执行此操作。 public function setName(string $name): self { $this-&gt;name = strtolower($name); return $this; }
  • 当然!在 setName() 中使用 'strtolower($name)' 它可以工作! 谢谢 !!
猜你喜欢
  • 2017-01-15
  • 2012-10-20
  • 1970-01-01
  • 2020-10-28
  • 2018-02-22
  • 2016-10-12
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多