0

オブジェクト指向のアウトラインから離れて、コントローラーの1つに生の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

それで、これは私が含めようとしているものへの道を誤ってたどったと言っているだけですか、それとも私が疑うように、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 に答える