Я настраиваю среду, в которой в качестве основы используются некоторые компоненты Symfony.
Я хотел бы использовать компонент Form в качестве диспетчера форм приложения с Twig для шаблона.Я устанавливаю: form, twig и twig_bridge
Поскольку у меня есть этот ограниченный набор компонентов, я зарегистрировал класс RuntimeLoader на Twig для управления зависимостями расширения формы через FormRenderer.
После настройкипростой тест с базовой формой, как описано в документации: https://symfony.com/doc/current/forms.html Я получаю эту ошибку:
An exception has been thrown during the rendering of a template ("No block "form_start" found while rendering the form.").
Вся моя работа начинается здесь:
//templating index.php
$twigLoader = new \Twig_Loader_Filesystem( getcwd() . '/Templates' );
$twig = new \Twig_Environment( $twigLoader );
$twig->addRuntimeLoader( new RuntimeLoader( $twig ) );
$twig->addExtension( new FormExtension() );
RuntimeLoaderаналогично описанному в документации по веткам: https://twig.symfony.com/doc/2.x/advanced.html#creating-an-extension Используется для учета зависимости узлов FormExtension от класса FormRenderer (для этого в Symfony Framework используется служба)
namespace Forge\UI;
use Twig\RuntimeLoader\RuntimeLoaderInterface;
use Symfony\Bridge\Twig\Form\TwigRendererEngine;
class RuntimeLoader implements RuntimeLoaderInterface {
private $twig;
public function __construct( $twig ) {
$this->twig = $twig;
}
public function load( $class ) {
//var_dump( $class );
if ( 'Symfony\Component\Form\FormRenderer' === $class ) {
return new $class( new TwigRendererEngine( [ 'form.html.twig' ], $this->twig ) );
}
}
}
ТогдаВ конце концов, в классе контроллера я называю весь суп:
$task = new Task();
$task->setTask( 'Make somebody happy' );
$form = $this->createFormBuilder( $task )
->add( 'task', TextType::class )
->add( 'save', SubmitType::class, [ 'label' => 'Create Task' ] )->getForm();
$content = $this->renderView( 'form.html.twig', [ 'form'=>$form->createView() ] );
Это выдает ошибку:
object(Twig_Error_Runtime)#258 (12) {
["lineno":"Twig_Error":private]=>
int(1)
["name":"Twig_Error":private]=>
string(14) "form.html.twig"
["rawMessage":"Twig_Error":private]=>
string(122) "An exception has been thrown during the rendering of a template ("No block "form_start" found while rendering the form.")."
["sourcePath":"Twig_Error":private]=>
string(58) "/var/www/../Templates/form.html.twig"
["sourceCode":"Twig_Error":private]=>
string(0) ""
["message":protected]=>
string(122) "An exception has been thrown during the rendering of a template ("No block "form_start" found while rendering the form.")."
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(58) "/var/www/../Templates/form.html.twig"
["line":protected]=>
int(1)
исходный путь ошибки - простой шаблон ветки:
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
Как мне избавиться от исключения?PS Я не хочу устанавливать все пакеты Symfony.