Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony-将细枝扩展与表单一起使用可防止出现错误_Php_Forms_Symfony_Widget_Twig - Fatal编程技术网

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) }}