teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

RuntimeLoaderの詳細を追記

2017/12/19 03:25

投稿

workr
workr

スコア158

title CHANGED
File without changes
body CHANGED
@@ -70,4 +70,13 @@
70
70
  }
71
71
  ```
72
72
 
73
- エラー発生時、そのプロパティ runtimeLoaders は1つオブジェクトが登録されていますが、``$loader->load($class)`` の結果は null になっているようでした。
73
+ エラー発生時、そのプロパティ runtimeLoaders は1つオブジェクトが登録されていますが、``$loader->load($class)`` の結果は null になっているようでした。
74
+
75
+ RuntimeLoader の mapping には下の2つが登録されています。
76
+
77
+ ```php
78
+ "Symfony\Bridge\Twig\Extension\HttpKernelRuntime" => "twig.runtime.httpkernel"
79
+ "Symfony\Bridge\Twig\Form\TwigRenderer" => "twig.form.renderer"
80
+ ```
81
+
82
+ しかし、``getRuntime($class)`` での第1引数には ``Symfony\Component\Form\FormRenderer`` が入っており、mapping 内に存在しないためロードに失敗しています。本来なら``Symfony\Bridge\Twig\Form\TwigRenderer``が指定されていなければいけないように見えます。

2

getRuntime() メソッドに関する補足を追記

2017/12/19 03:25

投稿

workr
workr

スコア158

title CHANGED
File without changes
body CHANGED
@@ -43,4 +43,31 @@
43
43
  コントローラーの時点ではエラーは出ていないようです。
44
44
  composer をつかって symfony/form や symfony/twig-bridge などのインストールは完了しているはずです。app.php にも FormServiceProvider などは register() してあります。また、vendor フォルダを見た限りでは FormRenderer.php は存在しています。
45
45
 
46
- 何が問題なのでしょうか?
46
+ 何が問題なのでしょうか?
47
+
48
+ ---
49
+
50
+ 【追記】
51
+ さらに根本を辿っていくと発生位置は Twig_Environment クラスの getRuntime() メソッドのようです。
52
+
53
+ ```php
54
+ public function getRuntime($class)
55
+ {
56
+ // エラー時 $this->runtimes は空の配列でした
57
+ if (isset($this->runtimes[$class])) {
58
+ return $this->runtimes[$class];
59
+ }
60
+
61
+ // 通常はここで load() が成功しますが結果は null でした
62
+ // runtimeLoaders には1つの RuntimeLoader オブジェクトがセットされていました
63
+ foreach ($this->runtimeLoaders as $loader) {
64
+ if (null !== $runtime = $loader->load($class)) {
65
+ return $this->runtimes[$class] = $runtime;
66
+ }
67
+ }
68
+
69
+ throw new Twig_Error_Runtime(sprintf('Unable to load the "%s" runtime.', $class));
70
+ }
71
+ ```
72
+
73
+ エラー発生時、そのプロパティ runtimeLoaders は1つオブジェクトが登録されていますが、``$loader->load($class)`` の結果は null になっているようでした。

1

$data が欠けていたので追記

2017/12/19 02:41

投稿

workr
workr

スコア158

title CHANGED
File without changes
body CHANGED
@@ -22,6 +22,11 @@
22
22
  ```php
23
23
  public function index(Application $app, Request $request){
24
24
 
25
+ $data = array(
26
+ 'name' => 'Your name',
27
+ 'email' => 'Your email',
28
+ );
29
+
25
30
  $form = $app['form.factory']->createBuilder(FormType::class, $data)
26
31
  ->add('name')
27
32
  ->add('email')