我在 Symfony 中创建了一个自定义表单类型和约束。
约束附加到表单类型,如下所示:
->add('customField', 'customField', array(
'required' =>
'mapped' => false,
'constraints' => array(new CustomField()),
))
Run Code Online (Sandbox Code Playgroud)
其中 CustomField 是约束类。
约束验证器的 validate() 方法如下所示:
public function validate($value, Constraint $constraint)
{
//I know this will always fail, but it's just for illustration purposes
$this->context->addViolation($constraint->message);
}
Run Code Online (Sandbox Code Playgroud)
我已经更改了表单的默认模板,如下所示:
{% block form_row -%}
<div class="form-group">
{{- form_widget(form) -}}
{{- form_errors(form) -}}
</div>
{%- endblock form_row %}
{% block customField_widget %}
{% spaceless %}
<!-- actually different but you get the idea -->
<input type="text" name="customField" …Run Code Online (Sandbox Code Playgroud) 我有一个带有两种...Action()方法的控制器。当我在浏览器内使用/newTask路由名称调用路由时,我有一个表单来设置-object。通过 -Button 提交后,我想重定向到具有路由名称的路由:newTaskTaskSubmit/successtask_success
class FormController extends Controller {\n\n /**\n * @Route("/newTask", name="newTask")\n */\n public function newAction(Request $request)\n {\n // create a task and give it some dummy data for this example\n $task = new Task();\n $task->setTask(\'Write a blog post\');\n\n $task->setDueDate(new \\DateTime(\'tomorrow\'));\n $form = $this->createFormBuilder($task)\n ->add(\'task\', TextType::class)\n ->add(\'dueDate\', DateType::class)\n ->add(\'save\', SubmitType::class, array(\'label\' => \'Create Task\'))\n ->getForm();\n\n $form->handleRequest($request);\n if ($form->isSubmitted() && $form->isValid()) {\n //Here I want to redirect...\n return $this->redirectToRoute(\'task_success\', array(\'task\' => …Run Code Online (Sandbox Code Playgroud) 我有一个form collection并想field2在提交表单后设置,具体取决于field1. field2在表单中不可编辑,但需要。
我尝试了每个FormEvent (FormEvents::)但收到错误:
SQLSTATE[23000]:违反完整性约束:1048 列“field2”不能为空
// AppBundle/Form/MyFormType.php
// ...
$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $even) {
$data = $event->getData();
$form = $event->getForm();
if (isset($data['field1'])) { // isset
$field2 = $this->container->get('repository')->find($data['field1'])->getValue(); // service works
$data['field2'] = $field2; // !!! doesn't work !!!
$data->setField2($field2); // !!! doesn't work !!!
}
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?提前致谢!
我如何向所有现有的 Symfony3 类型添加自定义“帮助”选项?
在 Symfony2 中,我是这样做的http://toni.uebernickel.info/2012/11/03/how-to-extend-form-fields-in-symfony2.1.html但现在我要升级到 Symfony3 和它不再起作用 - 它给了我“帮助”选项不存在。
http://symfony.com/doc/current/form/form_customization.html#adding-help-messages可以使用,但需要将所有帮助文本移动到模板中:
{{ form_widget(form.title, {'help': 'foobar'}) }}
Run Code Online (Sandbox Code Playgroud)
...从类型类:
->add(
'periodFrom',
TextType::class,
[
'label' => 'period-from',
'required' => false,
'help' => 'period-from.help'
]
)
Run Code Online (Sandbox Code Playgroud)
我想避免这种情况。谢谢。
在 Symfony 4 中,当你做类似的事情时:
<div>
{{ form_label(form.something) }}
{{ form_errors(form.something) }}
{{ form_widget(form.something) }}
</div>
Run Code Online (Sandbox Code Playgroud)
显示如下:
<div>
<label for="form_something">Something</label>
<ul>
<li>This field is required</li>
<li>Another error</li>
</ul>
<input type="text" id="form_something" name="form[something]" />
</div>
Run Code Online (Sandbox Code Playgroud)
我希望能够自定义错误的显示方式。
而不是这样显示:
<ul>
<li>This field is required</li>
<li>Another error</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我希望它是这样的:
<div class="form-control-feedback">This field is required</div>
<div class="form-control-feedback">Another error</div>
Run Code Online (Sandbox Code Playgroud)
您阅读了此页如何自定义表单渲染,但我无法理解它是如何工作的。
任何想法?谢谢。
我有一个奇怪的错误。我在自己的系统中实现了 Form 组件。在那里我创建了一个 FormType,我在其中使用 EntityType 作为字段。每次我想用 formBuilder 创建表单时,它都会抛出以下错误:
Fatal error: Uncaught ArgumentCountError: Too few arguments to function
Symfony\Bridge\Doctrine\Form\Type\DoctrineType::__construct(), 0 passed in
vendor/symfony/form/FormRegistry.php on line 92 and exactly 1 expected in
vendor/symfony/doctrine-bridge/Form/Type/DoctrineType.php:102
Run Code Online (Sandbox Code Playgroud)
这里有人知道为什么会这样吗?
作曲家包版本:
abraham/twitteroauth 0.7.4
doctrine/annotations v1.6.0
doctrine/cache v1.7.1
doctrine/collections v1.5.0
doctrine/common v2.8.1
doctrine/dbal v2.6.3
doctrine/inflector v1.3.0
doctrine/instantiator 1.1.0
doctrine/lexer v1.0.1
doctrine/orm v2.6.1
monolog/monolog 1.23.0
php-curl-class/php-curl-class 8.0.1
phpmailer/phpmailer v6.0.3
psr/cache 1.0.1
psr/log 1.0.2
psr/simple-cache 1.0.0
setasign/fpdf 1.8.1
symfony/cache v4.0.5
symfony/console v4.0.5
symfony/doctrine-bridge v4.0.5
symfony/event-dispatcher v4.0.5
symfony/filesystem v4.0.5
symfony/form v4.0.5 …Run Code Online (Sandbox Code Playgroud) 我想根据 symfony 文档为我的日期类型字段设置一个日期选择器。我自从 packagist 'eternicode / bootstrap-datepicker' 以来就安装了该软件包。我可以应用我定义的条件在我的js中输入日期字段(如日期格式),但显示仍然不可能。我的 js 控制台中没有错误消息。我什至没有看到 datepikcer 组件..
\n\n我的表格类型:
\n\n ->add('date_entree', DateType::class, [ \n 'widget' => 'single_text',\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 'html5' => false,\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 'attr' => ['class' => 'js-datepicker'],\n ])\n\nMy JS:\n\n $(document).on('ready', function() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 $('.js-datepicker').datepicker({\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 format: 'dd-mm-yyyy',\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 });\n });\nRun Code Online (Sandbox Code Playgroud)\n\n您对这个问题有什么想法吗?
\n实际上,当我尝试通过发送空字段来编辑表单时,会出现上述错误,
我的 UserType 类看起来像:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstName', null, [
'label' => 'Prénom'
])
->add('lastName', null, [
'label' => 'Nom'
])
->add('email', EmailType::class, [
'label' => 'Adresse e-mail'
])
->add('password', PasswordType::class, [
'label' => 'Mot de passe'
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
Run Code Online (Sandbox Code Playgroud) 如果我在控制器内,我可以使用以下方法轻松读取配置参数:
$this->container->getParameter('profession');
Run Code Online (Sandbox Code Playgroud)
但是当我在其他课程中,说一个Form类型时,我怎样才能获得配置参数?
$container = new Container();
$container->getParameter('profession');
Run Code Online (Sandbox Code Playgroud)
上面的代码不应该也不起作用.
The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess,
but is an instance of class Ecs\CrmBundle\Entity\Customer.
Run Code Online (Sandbox Code Playgroud)
是我在浏览器中收到的错误..
表格代码:
<?php
namespace Ecs\CrmBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class CustomerDefaultConfigType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('customerStatus')
->add('tags', null, array('multiple' => true, 'property' => 'tag_name'))
;
}
public function getName()
{
return 'ecs_crmbundle_customerdefaultconfigtype';
}
}
Run Code Online (Sandbox Code Playgroud)
和控制器动作:
<?php
namespace Ecs\CrmBundle\Controller;
use Ecs\CrmBundle\Entity\CustomerDefaultConfig;
use Ecs\CrmBundle\Form\CustomerDefaultConfigType;
public function newAction()
{
$entity = …Run Code Online (Sandbox Code Playgroud) symfony ×10
symfony-forms ×10
php ×5
symfony4 ×2
twig ×2
doctrine ×1
entity ×1
javascript ×1
validation ×1