10

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:

  1. in /nfs/personaldev/bwaine/mpp-audit/app/vendor/twig/twig/lib/Twig/Template.php line 303

  2. 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 %}
1
  • 1
    Please provide the source of register.twig as well. Commented Apr 10, 2012 at 15:16

1 Answer 1

3

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...

Sign up to request clarification or add additional context in comments.

1 Comment

Hey Skoop - it looks like the variable 'default' is in the default template used to render the form. I assumed it would be set somwhere automatically.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.