【发布时间】:2014-06-06 04:56:51
【问题描述】:
我正在尝试使用树枝扩展作为小部件来呈现页面的各个部分。
我有这个类EventWidget,它是一个twig 扩展,它定义了一个名为event_widget_create 的twig 函数,它负责呈现我的实体的创建页面。
问题是,即使我在控制器或小部件函数内执行var_dump($form->getErrorsAsString()) 时显示错误,视图内也没有打印表单错误。
我注意到,当点击提交时,字段数据消失了,我感觉页面重新加载了。
这是我的小部件扩展代码:
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_create.html.twig"
{% extends "@TskFE/layout.html.twig" %}
{% block content %}
{{ event_widget_create(form)|raw }}
{% endblock content %}
这是小部件呈现的局部视图:
"@Default/Partial/events_widget_create.html.twig":
{% 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) }}
【问题讨论】:
标签: php forms symfony widget twig