标签: formbuilder

在top <div>中显示simple_form错误消息

我有以下两个_forms:

用户表格

<%= simple_form_for(@user, :url => @target) do |f| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
      <ul>
      <% @user.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.input :email, :label => "User Email" %>
  <%= f.input :password, :label => "User Password" %>
  <%= f.input :first_name %>
  <%= f.input :last_name %>
  <%= f.button :submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

租户形式

<%= simple_form_for(@tenant, :url => @target) …
Run Code Online (Sandbox Code Playgroud)

formbuilder ruby-on-rails-3 simple-form

16
推荐指数
1
解决办法
2万
查看次数

symfony:我们不能拥有隐藏的实体字段吗?

我正在使用symfony中的实体字段渲染表单.

当我选择常规实体字段时,它运行良好.

$builder
    ->add('parent','entity',array(
            'class' => 'AppBundle:FoodAnalytics\Recipe',
            'attr' => array(
                'class' => 'hidden'
            )
        ))
Run Code Online (Sandbox Code Playgroud)

当我选择 - > add('parent','hidden')时会抛出以下错误:

表单的视图数据应该是标量,数组或\ ArrayAccess的实例,但是类AppBundle\Entity\FoodAnalytics\Recipe的实例.您可以通过将"data_class"选项设置为"AppBundle\Entity\FoodAnalytics\Recipe"或添加视图转换器来将类AppBundle\Entity\FoodAnalytics\Recipe的实例转换为标量,数组或实例来避免此错误ArrayAccess接口.500内部服务器错误 - LogicException

我们不能有隐藏的实体字段吗?为什么不?我是否有义务将另一个隐藏字段用于检索实体ID?

编辑:

基本上,我正在尝试做的是在显示它之前水合表单,但阻止用户更改其中一个字段(这里的父级).这是因为我需要将Id作为参数传递,我不能在表单操作URL中执行此操作.

php entity formbuilder symfony

16
推荐指数
4
解决办法
2万
查看次数

Rails AJAX:我的部分需要一个FormBuilder实例

所以我在我的Rails应用程序中有一个表单,它使用自定义FormBuilder为我提供一些自定义字段标记

<% form_for :staff_member, @staff_member, :builder => MyFormBuilder do |f| %>
[...]
    <%= render :partial => "staff_members/forms/personal_details", :locals => {:f => f, :skill_groups => @skill_groups, :staff_member => @staff_member} %>  
[...]
<% end %>
Run Code Online (Sandbox Code Playgroud)

现在,这部分是在一个由AJAX回调替换的形式的区域中.我最终在控制器中响应AJAX请求做的是:

render :partial => "staff_members/forms/personal_details", :locals => {:skill_groups => @skill_groups, :staff_member => @staff_member}
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,那么表单就会中断,因为我在form_for中使用的FormBuilder对象不再可用.有没有办法让我在用于AJAX回调的部分内部使用我的自定义FormBuilder对象?

ajax ruby-on-rails partial formbuilder

15
推荐指数
1
解决办法
8598
查看次数

如何将CSS ID属性设置为Symfony2表单输入

这个问题与另一个问题类似.目前的解决方案用于设置CSS类是将其添加到以FormBuilder呼叫的第三个参数:: Add()方法:

->add('title', null, array('attr' => array('class'=>'span2')))
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不适用于设置CSS ID.当我做

->add('title', null, array('attr' => array('id'=>'title-field')))
Run Code Online (Sandbox Code Playgroud)

......这被忽略了.ID仍然像namespace_formtype_field.

如果有的话,我该如何设置CSS ID?

html formbuilder symfony

14
推荐指数
4
解决办法
2万
查看次数

在Symfony 3.0中给出"string","Vendor\NameBundle\Form\EntitynameType"类型的预期参数

由于我使用symfony版本2.7(安装项目后立即出现404页面错误)的问题,我开始使用Symfony 3.0版.在一些小问题之后,我发现"app/console"被"bin/console"取代.所以我现在正在开发一个新项目,我已经构建了一个名为1的实体的新bundle

Codeit/RestaurantBundle && CodeitRestaurantBundle:Reserveren

格式注释,实体有一个名为"naam"的id和1字段(字符串,255).我更新了模式,我生成了Codeit的实体,在成功完成之后,我生成了一个带有写操作的crud.格式再次是注释,前缀是/ reserveren.

因此,如果我访问页面web/reserveren,我将获得我的实体的显示页面.不幸的是,如果我尝试添加新条目,我收到以下错误:

给出的类型为"string","Codeit\RestaurantBundle\Form\ReserverenType"的预期参数

我的Bundle/Form/ReserverenType.php

<?php

namespace Codeit\RestaurantBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ReserverenType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('naam')
    ;
}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Codeit\RestaurantBundle\Entity\Reserveren'
    ));
}
}
Run Code Online (Sandbox Code Playgroud)

我的实体代码

<?php

namespace Codeit\RestaurantBundle\Entity;

use Doctrine\ORM\Mapping …
Run Code Online (Sandbox Code Playgroud)

php formbuilder symfony

13
推荐指数
1
解决办法
1万
查看次数

不支持从define_method()定义的方法传递super的隐式参数

在" 使用Rails的敏捷Web开发 "(第三版)第537-541页中,它具有"自定义表单构建器"代码,如下所示:

  class TaggedBuilder < ActionView::Helpers::FormBuilder
    # <p> # <label for="product_description">Description</label><br/> # <%= form.text_area 'description' %> #</p>
    def self.create_tagged_field(method_name) 
      define_method(method_name) do |label, *args|
        @template.content_tag("p" , @template.content_tag("label" , label.to_s.humanize, 
        :for => "#{@object_name}_#{label}") + "<br/>" + super)
      end
    end
    field_helpers.each do |name| 
      create_tagged_field(name)
    end 
  end
Run Code Online (Sandbox Code Playgroud)

此代码不适用于Ruby 1.9.1.它返回错误如下:

implicit argument passing of super from method defined by define_method() is not supported. Specify all arguments explicitly. (ActionView::TemplateError)

我的问题是:我应该在代码中更改什么来解决这个问题?

ruby ruby-on-rails formbuilder ruby-1.9

12
推荐指数
2
解决办法
8527
查看次数

使用@ViewChild获取输入的.nativeElement将返回'undefined'

我在angular2中创建了以下表单:

import {Component, ElementRef, ViewChild, AfterViewInit} from "angular2/core";
import {Observable} from "rxjs/Rx";
import {ControlGroup, Control, Validators, FormBuilder} from "angular2/common";

@Component({
    selector: "ping-pong",
    template: `
                  <form
                     name="someform"                             [ngFormModel]="form">
                      <div class="form-group">
                          <input                                 
                              id="foobar"                        #foobar="ngForm"   <-- without ="ngForm" everything works fine
                              type="text"                        ngControl="foobar"
                              value=""
                              class="form-control"
                          />
                      </div>
                  </form>
              `,
    styles: [`
                  form {
                      width: 300px;
                  }
              `]
})

export class ChangepswdFormComponent implements AfterViewInit {
    @ViewChild("foobar") foobar: ElementRef;
    private form: ControlGroup;

    public constructor(formBuilder: FormBuilder) {
        this.form = formBuilder.group({
            foobar: [""]
        });
    }

    public ngAfterViewInit(): …
Run Code Online (Sandbox Code Playgroud)

forms formbuilder typescript angular

12
推荐指数
1
解决办法
2万
查看次数

如何在Symfony2中检查表单生成器中的用户角色?

好的,我正在尝试检查用户是否具有特定角色,我这样做

但是,当我这样做时:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('nombre',null,array('label' => 'Usuario'))
        ->add('email')
        ->add('password', 'repeated', array(
            'type' => 'password',
            'invalid_message' => 'Los campos deben coincidir',
            'first_name' => 'password',
            'second_name' => 'confirmar password',
            'options' => array('required' => false)
            ))

        ->add('cliente', 'entity', array(
        'class' => 'ClientesBundle:Cliente',
        'empty_value' => 'Company',            
        'required'    => false,
        'empty_data'  => null)
    **)**
      $user = $this->securityContext->getToken()->getUser();
      **if ($user->getRol() == 'ROLE_SUPER_ADMIN'){**
        ->add('rol') 
        **}**
    ;

}
Run Code Online (Sandbox Code Playgroud)

尝试过这个:

 **if ($this->securityContext->getToken()->getUser()->getRol() === 'ROLE_SUPER_ADMIN'){**
            ->add('rol') 
            **}**
Run Code Online (Sandbox Code Playgroud)

粗体线条(带有**的线条)有一条小红线表示错误,如果......我怎么解决这个问题呢?

role formbuilder symfony

11
推荐指数
3
解决办法
1万
查看次数

如何根据Symfony2/3中的用户角色自定义表单字段?

是否有正确的方法来自定义表单,具体取决于请求它的用户的角色?

我的场景非常简单:如果用户没有被ROLE_ADMIN授予,我需要隐藏一些字段.我试图避免在Twig上显示字段,但是

  {% if is_granted('ROLE_ADMIN') %}
              {{form_row(form.field)}}
  {% endif %}
Run Code Online (Sandbox Code Playgroud)

不起作用,因为表单生成器绕过此检查.

Symfony版本:2.8.2

编辑

感谢@Rooneyl 建议,我找到了解决方案:

首先,您需要将"角色"键添加到options参数.因此,在configureOptions()$options['role']中始终是ROLE_USER.

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'MyBundle\Entity\Ticket',
        'role' => 'ROLE_USER'
    ));
}
Run Code Online (Sandbox Code Playgroud)

然后在控制器中你必须传递getRoles()数组:

$user_roles = $this->getUser()->getRoles();
$form = $this->createForm('MyBundle\Form\TicketType', $ticket, array('role' => $user_roles));
Run Code Online (Sandbox Code Playgroud)

formbuilder symfony symfony-2.8

11
推荐指数
2
解决办法
7292
查看次数

ng14 中具有强类型表单的 FormBuilder

我有以下表格:

const enum Fields {
  FirstName = 'firstName',
  LastName = 'lastName'
}

interface FormType {
  [Fields.FirstName]: FormControl<string | null>;
  [Fields.LastName]: FormControl<string | null>;
}

public form!: FormGroup<FormType>;

this.form = new FormGroup({
  [Fields.FirstName]: new FormControl(null, { validators: Validators.required }),
  [Fields.LastName]: new FormControl(null, { validators: Validators.required }),
});
Run Code Online (Sandbox Code Playgroud)

使用 theenum是我为了避免输入错误而养成的习惯。

当我这样做时this.form.getRawValue().firstName, 的类型firstName被正确定义为string | null。但是,我更喜欢使用FormBuilder来构建我的表单,但我找不到使用 来翻译上面表单的方法FormBuilder。我试过这个:

this.form = this._fb.group<FormType>({
  [Fields.FirstName]: ['', Validators.required],
  [Fields.LastName]: ['', Validators.required],
});
Run Code Online (Sandbox Code Playgroud)

我当然可以使用一个FormGroup没有任何类型的简单的,但它会达不到目的:p

然而,这甚至不能作为 的推断类型 …

formbuilder angular angular-reactive-forms angular14

11
推荐指数
1
解决办法
1万
查看次数