尝试通过Symfony,通过本教程,以及在此页面(symfony.com/doc/current/forms.html)上快速了解以下示例:
$form = $this->createFormBuilder($task)
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class, array('label' => 'Create Post'))
->getForm();
return $this->render('default/new.html.twig', array(
'form' => $form->createView(),
));
之前从未见过这种语法,我很快就排除了它表面上看起来的呼叫链,然后发现解释每个"裸"箭头指向$form
的方法大多是正确的。它最终在这个版本中正常工作:
$formBuilder = $this->createFormBuilder($task);
$formBuilder->add('task', TextType::class);
$formBuilder->add('dueDate', DateType::class);
$formBuilder->add('save', SubmitType::class, array('label' => 'Create Post'));
$form = $formBuilder->getForm();
return $this->render('default/new.html.twig', array(
'form' => $form->createView(),
));
所以我试图理解原始样本。如果对看似断开的箭头的正确解释是"在第一行"上命名的对象的调用方法,这解释了除了" ->getForm();
"之外的所有内容。但是,如果将相同的规则应用于该行,则该行变为" $formBuilder->getForm();
",当然由于缺少对$ form的赋值而在render()行上失败(I意思是,即使我为建造者保留名称$ form,它仍然会失败。
教程中是否存在错误,或者我缺少哪些语法细微之处?
我已经广泛搜索了(" php","箭头","语法",...)的组合,但是避风港'在一系列方法调用中找到了有关省略对象名称的任何内容。
答案 0 :(得分:1)
原始样本确实是方法链接。
如果你看到这个例子:
$form = $this->createFormBuilder($task)
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class, array('label' => 'Create Post'))
->getForm();
它只是意味着方法createFormBuilder
,add
,getform
都属于同一个类$this
,因此它们大多从每个方法返回return $this;
,方法被链接到下一个。 TextType::class
,其余是类常量。
答案 1 :(得分:0)
这实际上是方法链接。单独的方法调用之间的新行只是为了更好的代码可读性。
此:
$formBuilder = $this->createFormBuilder($task);
$formBuilder->add('task', TextType::class);
等同于:
$formBuilder = $this->createFormBuilder($task)
->add('task', TextType::class);