我試圖使用樹枝擴展作爲窗口小部件來呈現頁面的各個部分。 我有這個類EventWidget
,它是一個樹枝擴展,它定義了一個名爲event_widget_create
的樹枝函數,它負責呈現我的實體的創建頁面。Symfony - 在表單中使用樹枝擴展可防止錯誤出現
問題是,即使在控制器或小部件功能中執行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) }}
是的,這固定它。我意識到這一點,但小部件內部存在某種邏輯衝突,並且我開始在任何地方拋出該選項來測試,並忘記將其刪除。現在這個邏輯衝突修復了,我必須刪除'error_bubbling'。非常感謝。 –