Php Symfony-将细枝扩展与表单一起使用可防止出现错误
我正在尝试使用细枝扩展作为小部件来呈现页面的各个部分。 我有一个类Php Symfony-将细枝扩展与表单一起使用可防止出现错误,php,forms,symfony,widget,twig,Php,Forms,Symfony,Widget,Twig,我正在尝试使用细枝扩展作为小部件来呈现页面的各个部分。 我有一个类EventWidget,它是一个细枝扩展,定义了一个名为event\u widget\u create的细枝函数,负责呈现实体的创建页面 问题是,视图中没有打印表单错误,即使在控制器或小部件函数中执行var\u dump($form->getErrorsAsString())时显示了错误 我注意到,当单击submit时,字段数据消失,我感觉页面重新加载 以下是我的小部件扩展代码: class EventWidget extends
EventWidget
,它是一个细枝扩展,定义了一个名为event\u widget\u create
的细枝函数,负责呈现实体的创建页面
问题是,视图中没有打印表单错误,即使在控制器或小部件函数中执行var\u dump($form->getErrorsAsString())
时显示了错误
我注意到,当单击submit时,字段数据消失,我感觉页面重新加载
以下是我的小部件扩展代码:
class EventWidget extends \Twig_Extension
{
/**
* @var Twig_Environment
*/
protected $env;
/**
* @var \Tsk\FEBundle\FormHandler\EventFormHandler
*/
protected $eventFormHandler;
function __construct(EventFormHandler $eventFormHandler)
{
$this->eventFormHandler = $eventFormHandler;
}
/**
* @param Twig_Environment $environment
*/
public function initRuntime(Twig_Environment $environment)
{
$this->env = $environment;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction("event_widget_create", [$this, "getEventWidgetCreate"]),
];
}
public function getEventWidgetCreate(FormInterface $form)
{
return $this->env->render("@Default/Partial/events_widget_create.html.twig",[
"form" => $form->createView()
]);
}
/**
* @return string
*/
public function getName()
{
return "event_widget";
}
}
这是我的控制器:
/**
* @Route("/")
*
* @package Tsk\FEBundle\Controller
*/
class EventController extends Controller
{
/**
* @Route("/event/create", name="tsk_fe_event_create")
* @Template("@Default/event_create.html.twig")
* @Security("has_role('ROLE_ARTIST')")
*/
public function createEventAction(Request $request)
{
$handler = $this->get("tsk_fe.event_form.handler");
$form = $handler->create();
if ($request->getMethod() == "POST") {
if ($handler->process($form)) {
return new RedirectResponse($this->generateUrl("tsk_fe_default_index"));
}
}
return ["form" => $form];
}
}
及表格:
class EventType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add("title", "text", [
"error_bubbling" => true
])
->add("description", "textarea", [
"required" => false
])
->add("start", "thrace_datetimepicker", [
"label" => "From",
"error_bubbling" => true
])
->add("end", "thrace_datetimepicker", [
"label" => "To",
"error_bubbling" => true
])
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults([
"data_class" => "Tsk\FEBundle\Entity\Event",
]);
}
public function getName()
{
return "event";
}
}
最后一种观点是:
这是主要观点:
“@Default/event\u create.html.twig”
这是小部件呈现的局部视图:
“@Default/Partial/events\u widget\u create.html.twig”
:
{%form\u主题表单与['ThraceFormBundle:form:fields.html.twig']%}
{form_start(form,{“action”:url(“tsk_fe_event_create”),'attr':{'novalidate':'novalidate'}}}}
{{form_标签(form.title)}
{{form_小部件(form.title,{“attr”:{“class”:“form control”}}}}
{{form_errors(form.title)}}
{{form_标签(form.description)}}
{{form_小部件(form.description,{“attr”:{“class”:“form control”}}}}
{{form_errors(form.description)}}
{{form_标签(form.start)}
{{form_小部件(form.start,{“attr”:{“class”:“form control”}}}}
{{form_errors(form.start)}}
{{form_标签(form.end)}
{{form_小部件(form.end,{“attr”:{“class”:“form control”}}}}
{{form_errors(form.end)}
{{form_rest(form)}
{{form_end(form)}}
您似乎通过使用'error\u bubbling'=>true来冒泡错误。不确定它是否是您想要的,因为您按字段分别渲染错误
错误冒泡表示所有错误都附加到父窗体,而不是附加到相关字段。因此,如果这是您想要的,您必须在模板中的表单顶部添加{{{form\u errors(form)}
,否则,只需删除error\u bubbling
选项。是的,这就解决了问题。我意识到了这一点,但小部件内部存在某种逻辑冲突,我开始到处抛出此选项进行测试,但忘记删除它。现在,随着逻辑冲突的修复,我必须删除错误\u冒泡
。谢谢。
{% extends "@TskFE/layout.html.twig" %}
{% block content %}
{{ event_widget_create(form)|raw }}
{% endblock content %}
{% form_theme form with ['ThraceFormBundle:Form:fields.html.twig'] %}
{{ form_start(form, {"action": url("tsk_fe_event_create"), 'attr': {'novalidate': 'novalidate'} }) }}
<div class="form-group">
{{ form_label(form.title) }}
{{ form_widget(form.title, {"attr":{"class": "form-control"} }) }}
{{ form_errors(form.title) }}
</div>
<div class="form-group">
{{ form_label(form.description) }}
{{ form_widget(form.description, {"attr":{"class": "form-control"} }) }}
{{ form_errors(form.description) }}
</div>
<div class="form-group">
{{ form_label(form.start) }}
{{ form_widget(form.start, {"attr":{"class": "form-control"} }) }}
{{ form_errors(form.start) }}
</div>
<div class="form-group">
{{ form_label(form.end) }}
{{ form_widget(form.end, {"attr":{"class": "form-control"} }) }}
{{ form_errors(form.end) }}
</div>
<input type="submit" value="Submit" class="btn btn-info"/>
<a href="{{ url("tsk_fe_default_index") }}">Cancel</a>
{{ form_rest(form) }}
{{ form_end(form) }}