代码之家  ›  专栏  ›  技术社区  ›  Matt Welander

Symfony2是否阻止标准php包含?

  •  0
  • Matt Welander  · 技术社区  · 12 年前

    我有一种情况,我打算脱离面向对象的大纲,只在我的一个控制器中包含一个原始的php文件。

    原因是我想在实体的表单分支文件中包含未知数量的额外表单字段(这些表单字段是在我想包含的单独文件中定义的)。

    我的意图是在提交操作中对这些字段(比如data_1、data_2等)进行循环,并将它们序列化并存储在实体属性“data”中。然后,将输出此实体结果的视图也将基于模板类型,知道需要多少和哪些额外字段,并以正确的方式输出它们,这要归功于为每个模板类型包含一个视图模板的类似设计。

    现在,在执行此操作时:

        //All template form files store all their html in $output
        include '/'.$templatePath.'/form.php';
    
        return $output;
    

    我得到一个symfony错误(不是php错误!)说

    Warning: include(/main/1/form.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /var/www/biztv/src/BizTV/ContentManagementBundle/Controller/DefaultController.php line 136
    

    那么,这只是说我错误地追踪了我试图包含的内容,还是像我怀疑的那样,这是一个被禁止的符号2动作?还有其他方法可以完成我在这里尝试的吗?

    1 回复  |  直到 12 年前
        1
  •  3
  •   AdrienBrault    12 年前

    只看代码,在路径的开头有一个斜杠,它将指向根文件系统。。。

    使用正确的相对路径(假设您的当前文件是Controller/xxxx.php,并且您的表单是Forms/form.php):

    include __DIR__.'/../Forms/form.php';
    

    但是,您应该使用输出缓冲来捕获包含.php文件的结果,然后将内容传递给您的trick模板。否则,它可能会干扰应该发送的标头等。

    在控制器中:

    ob_start();
    include __DIR__.'/../Forms/form.php';
    $formContent = ob_clean();
    
    ...
    
    return $this->render('tpl.html.twig', array(
        'form_content' => $formContent,
    ));
    

    然后在你的树枝模板中:

    {{ form_content|raw }}