質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Silex

Silexは、Symfony2の機能を持ち、sinatoraからインスパイアされた PHP5.3以上で動作するPHPマイクロフレームワークです。

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

Q&A

0回答

1285閲覧

form()やform_widget()を使ったフォームが表示できない

workr

総合スコア158

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Silex

Silexは、Symfony2の機能を持ち、sinatoraからインスパイアされた PHP5.3以上で動作するPHPマイクロフレームワークです。

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

0グッド

0クリップ

投稿2017/12/18 09:21

編集2017/12/19 03:25

Silex-Skeleton をベースに Twig テンプレートを使ってフォームを表示しようとしています。

公式ドキュメント(Form)を参考にしてひととおり作ったのですが、アクセスすると

Twig_Error_Runtime
Unable to load the "Symfony\Component\Form\FormRenderer" runtime.
in index.html.twig (line 5)

というエラーが表示されて先へ進めません。

問題を起こしているのは form_widget() の部分です。

php

1 <form action="#" method="post"> 2 {{ form_widget(form) }} 3 <input type="submit" name="submit" /> 4 </form>

コントローラー部分はこのようになっています。

php

1 public function index(Application $app, Request $request){ 2 3 $data = array( 4 'name' => 'Your name', 5 'email' => 'Your email', 6 ); 7 8 $form = $app['form.factory']->createBuilder(FormType::class, $data) 9 ->add('name') 10 ->add('email') 11 ->getForm(); 12 13 $form->handleRequest($request); 14 15 return $app['twig']->render('index.html.twig', array( 16 'form' => $form->createView() 17 )); 18 }

コントローラーの時点ではエラーは出ていないようです。
composer をつかって symfony/form や symfony/twig-bridge などのインストールは完了しているはずです。app.php にも FormServiceProvider などは register() してあります。また、vendor フォルダを見た限りでは FormRenderer.php は存在しています。

何が問題なのでしょうか?


【追記】
さらに根本を辿っていくと発生位置は Twig_Environment クラスの getRuntime() メソッドのようです。

php

1 public function getRuntime($class) 2 { 3 // エラー時 $this->runtimes は空の配列でした 4 if (isset($this->runtimes[$class])) { 5 return $this->runtimes[$class]; 6 } 7 8 // 通常はここで load() が成功しますが結果は null でした 9 // runtimeLoaders には1つの RuntimeLoader オブジェクトがセットされていました 10 foreach ($this->runtimeLoaders as $loader) { 11 if (null !== $runtime = $loader->load($class)) { 12 return $this->runtimes[$class] = $runtime; 13 } 14 } 15 16 throw new Twig_Error_Runtime(sprintf('Unable to load the "%s" runtime.', $class)); 17 }

エラー発生時、そのプロパティ runtimeLoaders は1つオブジェクトが登録されていますが、$loader->load($class) の結果は null になっているようでした。

RuntimeLoader の mapping には下の2つが登録されています。

php

1 "Symfony\Bridge\Twig\Extension\HttpKernelRuntime" => "twig.runtime.httpkernel" 2 "Symfony\Bridge\Twig\Form\TwigRenderer" => "twig.form.renderer"

しかし、getRuntime($class) での第1引数には Symfony\Component\Form\FormRenderer が入っており、mapping 内に存在しないためロードに失敗しています。本来ならSymfony\Bridge\Twig\Form\TwigRendererが指定されていなければいけないように見えます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問