Symfony教程

时间:2017-04-30 18:06:08

标签: php symfony syntax operators

尝试通过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","箭头","语法",...)的组合,但是避风港'在一系列方法调用中找到了有关省略对象名称的任何内容。

2 个答案:

答案 0 :(得分:1)

原始样本确实是方法链接。

如果你看到这个例子:

$form = $this->createFormBuilder($task)
    ->add('task', TextType::class)
    ->add('dueDate', DateType::class)
    ->add('save', SubmitType::class, array('label' => 'Create Post'))
    ->getForm();

它只是意味着方法createFormBuilderaddgetform都属于同一个类$this,因此它们大多从每个方法返回return $this;,方法被链接到下一个。 TextType::class,其余是类常量。

答案 1 :(得分:0)

这实际上是方法链接。单独的方法调用之间的新行只是为了更好的代码可读性。

此:

$formBuilder = $this->createFormBuilder($task);
$formBuilder->add('task', TextType::class);

等同于:

$formBuilder = $this->createFormBuilder($task)
->add('task', TextType::class);