gpt4 book ai didi

symfony - 从类型 Twig 模板中的 FormType 访问变量

转载 作者:行者123 更新时间:2023-12-04 00:11:18 37 4
gpt4 key购买 nike

我创建了一个这样的自定义表单类型:

class PositioningFlashType extends AbstractType                           
{
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'game' => new Game()
));
}

public function getParent()
{
return 'form';
}

/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'positioning_flash';
}

}

在另一种形式( GameType )类型中,我像这样使用它:
$builder                                                 
->add('flash', new PositioningFlashType(), array(
'mapped' => false,
'game' => $options['game']
))

在 Controller 内部,我想创建整个表单:
private function createEditForm(Game $entity)                                           
{
$form = $this->createForm(new GameType(), $entity, array(
'action' => $this->generateUrl('game_update', array('id' => $entity->getId())),
'method' => 'PUT',
'edit' => true,
'game' => $entity
));

$form->add('submit', 'submit', array('label' => 'Speichern'));

return $form;
}

所以基本上,我想做的就是通过 Game PositioningFlashType 的实例在它的模板里面我想访问这个 game像这样的例子:
value="{{ asset('data/swf/backendtool.swf') }}?game={{ game.id }}

但是symfony抛出一个错误,说变量 game没有定义。

将变量从 Controller 传递到嵌套 FormType 的正确方法是什么?

最佳答案

您可以通过包装 buildView() 添加自定义 View 变量.

/* ... */

use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;

/* ... */

class PositioningFlashType extends AbstractType
{
/* ... */

public function buildView(FormView $view, FormInterface $form, array $options)
{
parent::buildView($view, $form, $options);

$view->vars = array_merge($view->vars, array(
'game' => $options['game']
));
}

/* ... */
}

您现在将拥有 gameform.vars 下.只需覆盖您的自定义表单小部件即可执行您需要执行的任何操作。

{% block positioning_flash_widget %}
{% spaceless %}
{# ... #}

<input value="{{ form.vars.game.id }}" />
{% endspaceless %}
{% endblock %}

关于symfony - 从类型 Twig 模板中的 FormType 访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23832447/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com