标签: symfony-forms

如何在Symfony中自定义DataTransformer错误消息?

我简单的数据转换器将数字转换为实体,反之亦然。就像官方文档中的示例一样。

reverseTransform方法将数字转换为实体,如果失败,则抛出TransformationFailedException带描述性消息的:

public function reverseTransform($number)
{
    if (!$number) {
        return null;
    }

    $issue = $this->om
        ->getRepository('AcmeTaskBundle:Issue')
        ->findOneBy(array('number' => $number))
    ;

    if (null === $issue) {
        throw new TransformationFailedException(sprintf(
            'An issue with number "%s" does not exist!',
            $number
        ));
    }

    return $issue;
}
Run Code Online (Sandbox Code Playgroud)

但是,使用上述转换器的表单字段会收到一般错误消息“此值无效”。即使更改异常文本(我希望将其用作验证消息,但事实并非如此)也不会更改错误消息。

如何显示异常文本而不是“此值无效”?

symfony-forms symfony symfony-2.1 symfony-2.3

6
推荐指数
1
解决办法
1892
查看次数

Symfony表单(作为Doctrine的独立组件)EntityType不起作用

我正在使用Symfony表单(v3.0)而没有Symfony框架的其余部分.使用Doctrine v2.5.

我创建了一个表单,这里是表单类型:

class CreateMyEntityForm extends BaseFormType {

    public function buildForm(FormBuilderInterface $builder, array $options){
        $builder->add('myEntity', EntityType::class);
    }
}
Run Code Online (Sandbox Code Playgroud)

加载页面时,我收到以下错误.

传递给Symfony\Bridge\Doctrine\Form\Type\DoctrineType :: __ construct()的参数1必须是Doctrine\Common\Persistence\ManagerRegistry的实例,没有给出,在/ var/www/dev3/Vendor/symfony/form中调用/FormRegistry.php在第85行

我相信有一些配置需要在这里实现,但我不知道如何创建一个实现ManagerRegistryInterface的类 - 如果这是正确的事情.

有什么指针吗?

编辑 - 这是我设置Doctrine的代码

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Setup;

class Bootstrap {

    //...some other methods, including getCredentials() which returns DB credentials for Doctrine

    public function getEntityManager($env){

        $isDevMode = $env == 'dev';

        $paths = [ROOT_DIR . '/src'];

        $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false);

        $dbParams = $this->getCredentials($env);

        $em = EntityManager::create($dbParams, $config);

        return $em;
    }
}
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony doctrine-orm

6
推荐指数
2
解决办法
1926
查看次数

我的变压器不起作用(从模型数据到表格数据)

我正在构建一个silex应用程序(源代码在这里)
App\Form\DataTransformer我有一个MetadataTransformer类.
但该transform方法不起作用(反向转换).
它适用于a App\Form\Metadata AbstractType,它是一个集合的一部分App\Form\ArticleForm AbstractType.
最后一个表单是在我的编辑方法中调用的App\Controller\Admin\ArticleAdminController

数据转换器应该映射这样的数据

{"key":"value"}
Run Code Online (Sandbox Code Playgroud)

进入"表格数据",如:

[{"name":"key","value":"key"}] 
Run Code Online (Sandbox Code Playgroud)

因此它可以显示为集合.

Metadata.php

class MetaData extends AbstractType
{
    protected $span4 = "span4";
    protected $span3 = "span3";

    public function buildForm(FormBuilderInterface $builder,array $options)
    {
        $builder
            ->add('name', 'text', array(
                "label" => ' ',
                "attr"  => array(
                    "class"       => $this->span3,
                    "placeholder" => "name"
                )
            ))
            ->add('value', 'text', array(
                'label' => ' ',
                'attr'  => array(
                    "class"       => $this->span4,
                    'placeholder' => 'value'
                )
            )) …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony silex

5
推荐指数
1
解决办法
4120
查看次数

在普通表单类上使用奏鸣曲字段类型

我正在尝试在首页上插入自定义奏鸣曲表单字段类型,而不是在 SonataAdmin 中,如下所示:

 $form = $this->createFormBuilder($content)
            ->add('titleEs', 'text', array('required' => true, 'label' => 'label.title.spanish', 'attr' => array('class' => 'col-xs-12 form-control input-lg')))
            ->add('contentEs', 'ckeditor', array('required' => true,'label' => 'label.content.spanish', 'attr' => array('class' => 'col-xs-12')))
            ->add('titleEn', 'text', array('required' => true,'label' => 'label.title.english', 'attr' => array('class' => 'col-xs-12 form-control input-lg')))
            ->add('contentEn', 'ckeditor', array('required' => true, 'label' => 'label.content.english', 'attr' => array('class' => 'col-xs-12')))
            ->add('header', 'sonata_type_model', array('required' => true,'label' => 'label.content.headerImage'), array('link_parameters' => array('context' => 'content/front', 'size' => 'big')))
            //->add('coverImage', 'sonata_type_model_list', array('required' => true,'label' …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony form-fields sonata-admin sonata

5
推荐指数
1
解决办法
1755
查看次数

Symfony 2.8/3.0升级:如何处理带有可变参数的表单类型?

假设我将自定义表单类型创建为服务,如Symfony文档中所述.但我想要2个"性别"自定义类型,有2个不同的输入参数,我在Symfony 2.7中这样做:

# app/config/config.yml
parameters:
    genders1:
        m: Male
        f: Female
    genders2: # This makes no sense at all, but it is for the example purpose!
        h: Horse
        t: Turtle
Run Code Online (Sandbox Code Playgroud)

然后,我宣布了两个这样的服务:

<!-- src/AppBundle/Resources/config/services.xml -->
<service id="app.form.type.gender1" class="AppBundle\Form\Type\GenderType">
    <argument>%genders1%</argument>
    <tag name="form.type" alias="gender1" />
</service>

<service id="app.form.type.gender2" class="AppBundle\Form\Type\GenderType">
    <argument>%genders2%</argument>
    <tag name="form.type" alias="gender2" />
</service>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用相同的 GenderType类来处理2种自定义表单类型(使用gender1gender2别名),我可以这样使用:

$builder
    ->add('field1', 'gender1')
    ->add('field2', 'gender2');
Run Code Online (Sandbox Code Playgroud)

这允许我在一个GenderType具有不同输入参数的类()中添加一些公共逻辑(在这个例子中我有比2更多的可能性).

但是从Symfony 2.8开始,不推荐使用服务别名添加字段.类名必须作为第二个参数传递,如下所示:

$builder->add('field1', GenderType::class)
Run Code Online (Sandbox Code Playgroud)

那么如何才能区分我的2个服务(每个服务都没有相同的输入参数)?

创建Gender1TypeGender2Type扩展抽象GenderType …

symfony-forms symfony symfony-2.8

5
推荐指数
1
解决办法
908
查看次数

Symfony3 + Select2 AJAX - 禁用选项验证

我有一个带有 ChoiceType 字段的 Symfony3 表单。它使用带有 AJAX 数据源的 Select2。这一点工作正常。然而,当表单被提交时,Symfony 验证开始并抱怨:

This value is not valid  
Run Code Online (Sandbox Code Playgroud)

我想这是因为通过 AJAX 选择的选择不存在于表单类型的“选择”键中。

我对 Symfony 比较陌生。有人可以指出我正确的方向以禁用现场验证吗?

validation symfony-forms symfony select2

5
推荐指数
1
解决办法
2917
查看次数

Symfony pre_submit 更改字段顺序

鉴于以下表单类型,我如何在提交之前呈现我的第二个字段?我试过了,$form->remove但我总是会收到这个错误:

Warning: Illegal offset type in isset or empty
Run Code Online (Sandbox Code Playgroud)

不太确定如何解决这个问题。

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('survey', EntityType::class, [
            'class' => SurveyManager::class,
            'attr' => [
                'class' => 'field-change',
            ],
        ])
        ->add('submit', SubmitType::class, [

        ])
        ->addEventListener(
            FormEvents::PRE_SUBMIT,
            function (FormEvent $event) {
                $form = $event->getForm();

                $data = $event->getData();
                $modifier = $data['survey'];
                $form->add('headquarter', EntityType::class, [
                    'class' => HeadQuarterManager::class,
                    'query_builder' => function (HeadQuarterManagerRepository $er) use ($modifier) {
                        return $er->getHeadquarter($modifier);
                    }, …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony

5
推荐指数
1
解决办法
654
查看次数

从Symfony表单发送选择值代替选择键

我需要从Symfony发送表单ChoiceType :: class

但是我不需要选择键,我需要发送选择值。

那有可能吗?

 $form->add('section', ChoiceType::class, array(
                'mapped' => false,
                'choices' => array(
                    1 => 'value1',
                    2 => 'value2'

                ),
          ));
Run Code Online (Sandbox Code Playgroud)

如果我选择value1,我只想发送value1

不是默认的键1

symfony-forms symfony

5
推荐指数
2
解决办法
6808
查看次数

使用参数修改symfony表单的url

我想使用参数修改提交的symfony表单的url。从该平台尝试了许多解决方案,但没有解决方案有帮助!

当前网址如下:http://localhost:8000/search?app_bundle_search_form%5Bsearch%5D=qui&app_bundle_search_form%5Bbrand%5D=&app_bundle_search_form%5Bprice%5D=500%2C100000&app_bundle_search_form%5B_token%5D=BtA5bZb9HErUXzXFzGFbpEhlD6nD33zr7tKiPLxjpy4

我想要它像http:// localhost:8000 / search?search = qui?brand =?minprice = 500?maxprice = 100000

这是我的控制器:

 public function searchAction($searchTerm=null,Request $request)
{
    if ($request->getMethod() == 'GET') {

        $searchTerm = $request->query->get('app_bundle_search_form')['search'];
        $searchBrand = $request->query->get('app_bundle_search_form')['brand'];
        $price = $request->query->get('app_bundle_search_form')['price'];
        $price = explode(",", $price);

        $minPrice = $price[0];
        $maxPrice = $price[1];

        $em = $this->getDoctrine()->getManager();
        $search = $em->getRepository('AppBundle:Classified')->searchClassifieds($searchTerm, $searchBrand, $minPrice, $maxPrice);


    }


    return $this->render('search-result.html.twig', [
        'searchTerm' => $searchTerm,
        'results' => $search
    ]);


}
Run Code Online (Sandbox Code Playgroud)

形成:

 public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->setMethod('GET')
        ->add('search', TextType::class,array(
            'required'=> false …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony

5
推荐指数
1
解决办法
544
查看次数

Symfony UniqueEntity 在更新现有实体时显示错误

我有一个相当简单的实体UniqueEntity验证:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping\ManyToOne;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity("email", message="Email already in use")
 * 
 *
 */
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=180, unique=true)
     */
    private $email;
Run Code Online (Sandbox Code Playgroud)

表单(故意删除所有其他表单字段)

namespace App\Form;

use App\Entity\Company;
use App\Entity\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony doctrine-orm symfony-validator

5
推荐指数
1
解决办法
1025
查看次数