0

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

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

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

现在,当这样做时:

    //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

那么这只是说我错误地追踪了我试图包含的路径,还是像我怀疑的那样,它是 symfony2 的禁止行为?还有其他方法可以完成我在这里尝试的事情吗?

4

1 回答 1

3

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

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

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

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

在你的控制器中:

ob_start();
include __DIR__.'/../Forms/form.php';
$formContent = ob_clean();

...

return $this->render('tpl.html.twig', array(
    'form_content' => $formContent,
));

然后在你的树枝模板中:

{{ form_content|raw }}
于 2012-09-14T14:18:55.283 回答