这是我的表单构建器代码
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('phoneAlternative', 'number',array('max_length'=>15));
$builder->add('emailPersonal', 'email');
$builder->add('addressCurrent', 'textarea');
}
Run Code Online (Sandbox Code Playgroud)
这是html标记
<input id="employee_phoneAlternative" type="text" maxlength="15" required="required" name="employee[phoneAlternative]" class="valid">
Run Code Online (Sandbox Code Playgroud)
任何人都建议我.为什么输入类型给出"文本",因为我给出了一个数字.建筑形式.我将如何使用表单生成器在symfony2中获取输入类型为"数字".
也许我忽略了一些东西,希望这很容易.
我有一个表单,我最终想要的是以下结果:
领域:
应该a在标签和额外的div之后获得额外的-Tag,填写帮助和/或错误(如果适用).
我需要做的是,必填字段a使用以下方法获取-Tag:
{% use 'form_div_layout.html.twig' with field_label as base_field_label %}
{% block field_label %}
{{ block('base_field_label') }}
{% if required %}
<a href=""><span> </span></a>
{% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
所以,我尝试过的是不同的版本:
{% use 'form_div_layout.html.twig' with field_label as base_field_label %}
{% block field_label %}
{{ block('base_field_label') }}
{% if required or help is defined %}
<a href=""><span> </span></a>
{% endif %}
{% endblock %}
{% block field_row %}
{% spaceless %}
<div class="row"> …Run Code Online (Sandbox Code Playgroud) 如何在symfony 2中设置渲染字段的名称属性?
预期产量:
<input type="text" name="test" value="test" />
Run Code Online (Sandbox Code Playgroud)
以这种方式渲染场
{{ form_widget(form.test, { 'attr': {'name': 'test'} }) }}
Run Code Online (Sandbox Code Playgroud)
绝对不行.
输出仍然是
<input type="text" name="form[test]" value="test" />.
Run Code Online (Sandbox Code Playgroud)
有没有办法动态设置name属性或id属性?谢谢.
我正在创建一个"日"选择下拉列表.使用selectRange我可以这样做:
{{ Form::selectRange('day', 1, 31, $day) }}
Run Code Online (Sandbox Code Playgroud)
问题是,当表单加载时,如果$day未设置,则1默认选择.是否可以使用selectRange为它们提供具有NULL值的"请选择"选项?
我有一个添加不同的字段(我添加新的控件,因为只是使用*ngIf将它们从模板中隐藏起来,因此不会从表单中将它们排除,因此导致表单无效)基于select选项中的选定选项.我正在使用Angular2中的表单的addControl方法向可用表单添加新控件.控件正在正确添加,但我不知道为什么这些添加的控件的值在用户输入后没有更新.以下是我向表单添加新控件的方法:
signUpForm: ControlGroup;
constructor(private fb: FormBuilder) { }
ngOnInit(): void {
this.signUpForm = this.fb.group({
firstName: ["", Validators.required],
lastName: ["", Validators.required],
group: ["", Validators.required]
});
}
modifyControls(selectedGroup): number {
if (selectedGroup == 1) {
if (this.signUpForm.contains("studentID")) {
this.signUpForm.removeControl("studentID");
}
this.signUpForm.addControl("teacherCode", new Control("", Validators.required));//need some custome validations
this.signUpForm.addControl("teacherID", new Control("", Validators.required));
return 1;
}
else if (selectedGroup == 2) {
if (this.signUpForm.contains("teacherCode")) {
this.signUpForm.removeControl("teacherCode");
this.signUpForm.removeControl("teacherID");
}
this.signUpForm.addControl("studentID", new Control("", Validators.required));
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
看起来角度不能识别那些新的领域.我认为它与AbstractControl有关,但文档缺乏这一点.以下是问题的快照,即动态添加的控件未被角度拾取.

为了显示问题,我在下面的plunker中创建了一个简单的例子(请转到版本2来复制此问题).
https://plnkr.co/edit/RI4JL4Pnf2LrJ3TsxsSt?p=preview
我做错了什么以及如何使其适用于当前的设置?实现相同行为的其他选择有哪些?
谢谢您的帮助
解决方法:
modifyControls(selectedGroup) { …Run Code Online (Sandbox Code Playgroud) 为什么我一直收到这个错误?我想我做的一切都正常吗?
"EXCEPTION:Uncaught(在promise中):TypeError:value.forEach不是函数TypeError:value.forEach不是FormArray.setValue中的函数"
组件类:
jobDetails: FormGroup;
techFormArray: FormArray;
constructor(private formBuilder: FormBuilder){
this.techFormArray = new FormArray([
new FormControl(''),
new FormControl(''),
new FormControl('')
]);
this.jobDetails = this.formBuilder.group({
techs: this.formBuilder.array([])
});
this.jobDetails.setValue({
techs: this.techFormArray
});
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<form [formGroup]="jobDetails">
<div formArrayName="techs" >
<div style="display: flex; flex-direction: column">
<div *ngFor="let tech of techFormArray.controls; let i=index">
<md-checkbox [formControlName]="i">
{{i}}
</md-checkbox>
</div>
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
解:
FunStuff没错,我无法使用setValue ....所以我删除了它.问题解决了哈哈.我改变了一些事情,我不确定我做了什么,它基本上是蛮力的试验和错误几个小时,但后来它工作了!:)
这是工作版!
jobDetails: FormGroup;
constructor(private formBuilder: FormBuilder){
this.jobDetails = formBuilder.group({
techs: formBuilder.array([
formBuilder.control(''),
formBuilder.control('')
])
});
}
Run Code Online (Sandbox Code Playgroud)
新HTML:
<form [formGroup]="jobDetails"> …Run Code Online (Sandbox Code Playgroud) 我想fields_for在关联中使用记录的子集.
我有一个Month模型,哪个has_many :payments.
但在我看来,我只希望得到fields_for一些付款.例如:
- fields_for @month.payments.large
Run Code Online (Sandbox Code Playgroud)
这不起作用.
我可以传递一组记录fields_for,而不是通常的符号(fields_for :payments)方法吗?
更新到rc3后,ngFormModel无法正常工作
我的HTML:
<form [ngFormModel]="form">
<select ngControl="syncTime" name="syncTime" [disabled]="!sync" class="form- control">
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
我的.ts
constructor(private fb: FormBuilder) {
this.form = this.fb.group({
syncTime: this.syncTime
});
Run Code Online (Sandbox Code Playgroud) 我正在使用Angular2的FormBuilder开发一个带有自定义验证的表单.问题:在customValidator中我this用来访问本地对象data.我在undefined执行验证时遇到错误.
看起来customValidator在不同的对象中执行,因此更改this引用
问题:如何将引用传递this给customValidator?
export class Ast {
public data:any;
public myForm:FormGroup;
constructor(private _fb:FormBuilder) {
this.data = {foo: "bar"};
}
customValidator(c: FormControl) {
if (this.data.foo == "bar") { // This line crashes
// DO something
}
}
ngOnInit() {
this.myForm = this._fb.group({
some_field: ['', [<any>Validators.required], this.customValidator]
})
}
}
Run Code Online (Sandbox Code Playgroud) 我将 ionic2 与 angular2 一起使用,并且我有一个使用 formbuilder 构建的表单,但我想检测某个输入的新变化。
ionViewDidLoad() {
this.purchaseDataForm = this.formBuilder.group({
kms: ['', Validators.required],
lts: ['', Validators.required],
price: ['', Validators.required],
total: ['', Validators.required]
});
}
Run Code Online (Sandbox Code Playgroud)
所以这是我的形式是如何得到证实,但我想认购的valuechanges价格和LTS的投入,你知道该怎么做?
我正在尝试使用以下功能,但它显示 Cannot read property 'valueChanges' of undefined
ngOnInit() {
this.purchaseDataForm.price.valueChanges.subscribe(value => {
console.log(value);
});
}
Run Code Online (Sandbox Code Playgroud)
谢谢!