Error When Using Symfony Forms / Silex & Twig
php, silex, twig
Solution
You seem to be using a variable disabled in your twig template (as {{ disabled }} or in an if statement perhaps) that you're not passing to the template. In above-pasted code I don't see any variable named 'disabled' that's being passed to twig...
Problem
I'm trying to render a Symfony form using twig in a Silex application. I'm using Symfony 2 Form library, Symfony Bridge Twig Forms Extension and Twig. Here is my bootsrap file: ``` require_once __DIR__ . '/../app/silex.phar'; $app = new Silex\Application(); $app['debug'] = true; // Set up the autoloader require_once __DIR__ . '/../app/vendor/.composer/autoload.php'; // Load Configuration into container $parser = new Symfony\Component\Yaml\Parser(); $config = $parser->parse(file_get_contents(__DIR__ . '/../app/config/config.yml')); $app['config'] = $config; // Set up Symfony bridge (nice twig functions) $app->register(new Silex\Provider\SymfonyBridgesServiceProvider(), array( 'symfony_bridges.class_path' => __DIR__ . '/vendor/symfony/twig-bridge', )); // Set Up Templating $app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__ . '/../app/views', 'twig.class_path' => __DIR__ . '/../app/vendor/twig/twig/lib', )); // Set Up Database $app->register(new Silex\Provider\DoctrineServiceProvider(), array( 'db.options' => array( 'driver' => $app['config']['db']['driver'], 'host' => $app['config']['db']['host'], 'user' => $app['config']['db']['user'], 'password' => $app['config']['db']['password'], 'dbname' => $app['config']['db']['dbname'] ), 'db.dbal.class_path' => __DIR__ . '/vendor/doctrine/doctrine-dbal/lib', 'db.common.class_path' => __DIR__ . '/vendor/doctrine/doctrine-common/lib', )); // Set up the Symfony forms component $app->register(new Silex\Provider\FormServiceProvider()); // Routes $app->get('/', function() use($app) { return $app['twig']->render('index.twig', array()); }); $app->get('/info', function() use($app) { return $app['twig']->render('info.twig', array()); }); $app->get('/register', function() use($app) { $builder = $app['form.factory']->createBuilder(new MppInt\Form\Type\RegisterType() ) ->add('id', 'text') ->add('firstName', 'text') ->add('lastName', 'text') ->add('email', 'password') ->add('password', 'text'); $form = $builder->getForm(); return $app['twig']->render('register.twig', array('form' => $form->createView())); }); $app->run(); ``` I get the following error: Twig_Error_Runtime: Variable "disabled" does not exist. The stack trace is very large but here are the first two entries: in /nfs/personaldev/bwaine/mpp-audit/app/vendor/twig/twig/lib/Twig/Template.php line 303 at Twig_Template->getContext(array('value' => '', 'attr' => array(), 'form' => object(FormView), 'id' => 'register_firstName', 'name' => 'firstName', 'full_name' => 'register[firstName]', 'errors' => array(), 'read_only' => false, 'required' => true, 'max_length' => null, 'pattern' => null, 'size' => null, 'label' => 'Firstname', 'multipart' => false, 'types' => array('field', 'text'), 'type' => 'text'), 'disabled') in /nfs/personaldev/bwaine/mpp-audit/app/vendor/twig/twig/lib/Twig/Environment.php(314) : eval()'d code line 986 Has anyone got any idea whats going on? EDIT - I think the 'disabled' variable is in the default template. From vendor/symfony/twig-bridge/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig ``` {% block widget_attributes %} {% spaceless %} id="{{ id }}" name="{{ full_name }}"{% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %} {% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %} {% endspaceless %} {% endblock widget_attributes %} ``` As requested - register.twig register.twig ``` {% extends "base.twig" %} {% block title %}Welcome to Nuts.co.uk{% endblock %} {% block head %} {{ parent() }} {% endblock %} {% block content %} <div class="row"> <div class="span12"> <h2>Register</h2> <p> Register for Nuts.co.uk and we'll give you free access to cool stuff in addition you can subscribe to our premium content. </p> <form action="/contact" method="post"> <fieldset > <legend>Contact</legend> {{ form_errors(form) }} {{ form_row(form.firstName) }} {{ form_row(form.lastName) }} {{ form_row(form.email) }} {{ form_row(form.password) }} <button type="submit" class="btn btn-info">Send</button> </fieldset> </form> </div> </div> {% endblock %} ```