Finished first version of PhpTheme, added huge functional test.
This commit is contained in:
parent
3e2b8e5f12
commit
44e85ae2f2
@ -0,0 +1 @@
|
|||||||
|
<?php echo $renderer->getTheme()->render('form', 'widget', $renderer->getVars()); ?>
|
@ -12,5 +12,5 @@
|
|||||||
$fields['year']->getWidget(),
|
$fields['year']->getWidget(),
|
||||||
$fields['month']->getWidget(),
|
$fields['month']->getWidget(),
|
||||||
$fields['day']->getWidget(),
|
$fields['day']->getWidget(),
|
||||||
), $pattern) ?>
|
), $date_pattern) ?>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<?php echo $fields['date']->getWidget() ?>
|
<?php echo $fields['date']->getWidget() ?>
|
||||||
<!-- keep space -->
|
<?php /* keep space */ ?>
|
||||||
<?php echo $fields['time']->getWidget() ?>
|
<?php echo $fields['time']->getWidget() ?>
|
@ -1,5 +0,0 @@
|
|||||||
<div>
|
|
||||||
<?php echo $field->getLabel() ?>
|
|
||||||
<?php echo $field->getErrors() ?>
|
|
||||||
<?php echo $field->getWidget() ?>
|
|
||||||
</div>
|
|
@ -1,10 +0,0 @@
|
|||||||
<input type="file"
|
|
||||||
id="<?php echo $field['file']->getVar('id') ?>"
|
|
||||||
name="<?php echo $field['file']->getVar('name') ?>"
|
|
||||||
<?php if ($field['file']->getVar('disabled')): ?>disabled="disabled"<?php endif ?>
|
|
||||||
<?php if ($field['file']->getVar('required')): ?>required="required"<?php endif ?>
|
|
||||||
<?php if ($field['file']->getVar('class')): ?>class="<?php echo $field['file']->getVar('class') ?>"<?php endif ?>
|
|
||||||
/>
|
|
||||||
|
|
||||||
<?php echo $fields['token']->getWidget() ?>
|
|
||||||
<?php echo $fields['original_name']->getWidget() ?>
|
|
@ -0,0 +1,10 @@
|
|||||||
|
<input type="file"
|
||||||
|
id="<?php echo $fields['file']->getVar('id') ?>"
|
||||||
|
name="<?php echo $fields['file']->getVar('name') ?>"
|
||||||
|
<?php if ($fields['file']->getVar('disabled')): ?>disabled="disabled"<?php endif ?>
|
||||||
|
<?php if ($fields['file']->getVar('required')): ?>required="required"<?php endif ?>
|
||||||
|
<?php if ($fields['file']->getVar('class')): ?>class="<?php echo $fields['file']->getVar('class') ?>"<?php endif ?>
|
||||||
|
/>
|
||||||
|
|
||||||
|
<?php echo $fields['token']->getWidget() ?>
|
||||||
|
<?php echo $fields['name']->getWidget() ?>
|
@ -1,6 +0,0 @@
|
|||||||
<div>
|
|
||||||
<?php echo $field->getErrors() ?>
|
|
||||||
<?php echo $field->getRows() ?>
|
|
||||||
<?php echo $field->getRest() ?>
|
|
||||||
</div>
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
|||||||
|
<div>
|
||||||
|
<?php echo $renderer->getErrors() ?>
|
||||||
|
<?php foreach ($fields as $field): ?>
|
||||||
|
<?php echo $field->getRow(); ?>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<?php echo $renderer->getRest() ?>
|
||||||
|
</div>
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
<?php $renderer->getTheme()->render('number', 'widget', $renderer->getVars()); ?>
|
@ -1,4 +1,4 @@
|
|||||||
<?php echo str_replace('{{ widget }}',
|
<?php echo str_replace('{{ widget }}',
|
||||||
$view['form']->render($field, array(), array(), 'FrameworkBundle:Form:number_field.html.php'),!
|
$renderer->getTheme()->render('number', 'widget', $renderer->getVars()),
|
||||||
$pattern
|
$money_pattern
|
||||||
) ?>
|
) ?>
|
||||||
|
@ -1 +1 @@
|
|||||||
<?php echo $view['form']->render($field, array(), array(), 'FrameworkBundle:Form:number_field.html.php') ?> %
|
<?php echo $renderer->getTheme()->render('number', 'widget', $renderer->getVars()) ?> %
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
<?php foreach ($fields AS $field): ?>
|
||||||
|
<?php echo $field->getRow(); ?>
|
||||||
|
<?php endforeach; ?>
|
@ -0,0 +1,5 @@
|
|||||||
|
<?php foreach ($fields as $field): ?>
|
||||||
|
<?php if (!$field->isRendered()): ?>
|
||||||
|
<?php echo $field->getWidget() ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endforeach; ?>
|
@ -0,0 +1,5 @@
|
|||||||
|
<div>
|
||||||
|
<?php echo $renderer->getLabel() ?>
|
||||||
|
<?php echo $renderer->getErrors() ?>
|
||||||
|
<?php echo $renderer->getWidget() ?>
|
||||||
|
</div>
|
@ -0,0 +1,9 @@
|
|||||||
|
<input id="<?php echo $id ?>" type="<?php echo $type ?>"
|
||||||
|
name="<?php echo $name ?>"
|
||||||
|
value="<?php echo $value ?>"
|
||||||
|
<?php if ($class): ?>class="<?php echo $class; ?>"<?php endif; ?>
|
||||||
|
<?php if ($disabled): ?>disabled="disabled"<?php endif ?>
|
||||||
|
<?php if ($required): ?>required="required"<?php endif ?>
|
||||||
|
<?php if ($max_length && $max_length > 0): ?>maxlength="<?php echo $max_length ?>"<?php endif; ?>
|
||||||
|
<?php if ($size && $size > 0): ?>size="<?php echo $size ?>"<?php endif; ?>
|
||||||
|
/>
|
@ -0,0 +1,185 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Bundle\FrameworkBundle\Tests\Form;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
|
||||||
|
use Symfony\Component\Form\Type\AbstractFieldType;
|
||||||
|
use Symfony\Component\Form\FieldBuilder;
|
||||||
|
use Symfony\Component\Form\CsrfProvider\DefaultCsrfProvider;
|
||||||
|
use Symfony\Component\Form\Type\Loader\DefaultTypeLoader;
|
||||||
|
use Symfony\Component\Form\FormFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test theme template files shipped with framework bundle.
|
||||||
|
*/
|
||||||
|
class PhpThemeFunctionalTest extends TestCase
|
||||||
|
{
|
||||||
|
private $engine;
|
||||||
|
private $theme;
|
||||||
|
/** @var FormFactory */
|
||||||
|
private $factory;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$parser = new \Symfony\Component\Templating\TemplateNameParser();
|
||||||
|
$loader = new \Symfony\Component\Templating\Loader\FilesystemLoader(__DIR__ . '/../../Resources/views/Form/%name%');
|
||||||
|
$this->engine = new \Symfony\Component\Templating\PhpEngine($parser, $loader, array());
|
||||||
|
$this->engine->addHelpers(array(
|
||||||
|
new \Symfony\Bundle\FrameworkBundle\Templating\Helper\TranslatorHelper(
|
||||||
|
new \Symfony\Component\Translation\IdentityTranslator(
|
||||||
|
new \Symfony\Component\Translation\MessageSelector()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
));
|
||||||
|
$this->theme = new \Symfony\Component\Form\Renderer\Theme\PhpTheme($this->engine);
|
||||||
|
$csrfProvider = new DefaultCsrfProvider('foo');
|
||||||
|
$validator = $this->getMock('Symfony\Component\Validator\ValidatorInterface');
|
||||||
|
$storage = new \Symfony\Component\HttpFoundation\File\TemporaryStorage('foo', 1, \sys_get_temp_dir());
|
||||||
|
|
||||||
|
// ok more than 2 lines, see DefaultFormFactory.php for proposed simplication
|
||||||
|
$typeLoader = new DefaultTypeLoader();
|
||||||
|
$this->factory = new FormFactory($typeLoader);
|
||||||
|
$typeLoader->initialize($this->factory, $this->theme, $csrfProvider, $validator , $storage);
|
||||||
|
// this is the relevant bit about your own forms:
|
||||||
|
$typeLoader->addType(new MyTestFormConfig());
|
||||||
|
$typeLoader->addType(new MyTestSubFormConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFullFormRendering()
|
||||||
|
{
|
||||||
|
$form = $this->factory->create('my.form');
|
||||||
|
$html = $form->getRenderer()->getWidget();
|
||||||
|
|
||||||
|
$dom = new \DomDocument('UTF-8');
|
||||||
|
$dom->loadXml($html);
|
||||||
|
|
||||||
|
$xpath = new \DomXpath($dom);
|
||||||
|
$ids = array();
|
||||||
|
foreach ($xpath->evaluate('//*[@id]') as $node) {
|
||||||
|
$ids[] = $node->tagName . "#" . $node->getAttribute('id');
|
||||||
|
}
|
||||||
|
$this->assertEquals(array (
|
||||||
|
'input#my.form_field0_subfield0',
|
||||||
|
'input#my.form_field1',
|
||||||
|
'select#my.form_field2_month',
|
||||||
|
'select#my.form_field2_day',
|
||||||
|
'select#my.form_field2_year',
|
||||||
|
'select#my.form_field5_hour',
|
||||||
|
'select#my.form_field5_minute',
|
||||||
|
'input#my.form_field3_active',
|
||||||
|
'input#my.form_field3_inactive',
|
||||||
|
'select#my.form_field21',
|
||||||
|
'select#my.form_field22',
|
||||||
|
'select#my.form_field4_date_month',
|
||||||
|
'select#my.form_field4_date_day',
|
||||||
|
'select#my.form_field4_date_year',
|
||||||
|
'select#my.form_field4_time_hour',
|
||||||
|
'select#my.form_field4_time_minute',
|
||||||
|
'select#my.form_field6_month',
|
||||||
|
'select#my.form_field6_day',
|
||||||
|
'select#my.form_field6_year',
|
||||||
|
'input#my.form_field7',
|
||||||
|
'input#my.form_field8_file',
|
||||||
|
'input#my.form_field8_token',
|
||||||
|
'input#my.form_field8_name',
|
||||||
|
'select#my.form_field11',
|
||||||
|
'select#my.form_field12',
|
||||||
|
'input#my.form_field13',
|
||||||
|
'input#my.form_field14',
|
||||||
|
'input#my.form_field15',
|
||||||
|
'input#my.form_field16',
|
||||||
|
'input#my.form_field17',
|
||||||
|
'input#my.form_field18_first',
|
||||||
|
'input#my.form_field18_second',
|
||||||
|
'select#my.form_field19',
|
||||||
|
'input#my.form_field20',
|
||||||
|
), $ids);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyTestFormConfig extends AbstractFieldType
|
||||||
|
{
|
||||||
|
public function configure(FieldBuilder $builder, array $options)
|
||||||
|
{
|
||||||
|
$builder->setDataClass('Symfony\Bundle\FrameworkBundle\Tests\Form\MyTestObject');
|
||||||
|
$builder->add('my.sub_form', 'field0');
|
||||||
|
$builder->add('text', 'field1', array('max_length' => 127, 'id' => 'foo'));
|
||||||
|
$builder->add('date', 'field2');
|
||||||
|
$builder->add('time', 'field5');
|
||||||
|
$builder->add('choice', 'field3', array(
|
||||||
|
'expanded' => true,
|
||||||
|
'multiple' => false,
|
||||||
|
'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
|
||||||
|
));
|
||||||
|
$builder->add('choice', 'field21', array(
|
||||||
|
'expanded' => false,
|
||||||
|
'multiple' => false,
|
||||||
|
'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
|
||||||
|
));
|
||||||
|
$builder->add('choice', 'field22', array(
|
||||||
|
'expanded' => false,
|
||||||
|
'multiple' => false,
|
||||||
|
'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
|
||||||
|
'preferred_choices' => array('active')
|
||||||
|
));
|
||||||
|
$builder->add('datetime', 'field4');
|
||||||
|
$builder->add('birthday', 'field6');
|
||||||
|
$builder->add('checkbox', 'field7');
|
||||||
|
$builder->add('file', 'field8');
|
||||||
|
$builder->add('hidden', 'field9');
|
||||||
|
$builder->add('integer', 'field10');
|
||||||
|
$builder->add('language', 'field11');
|
||||||
|
$builder->add('locale', 'field12');
|
||||||
|
$builder->add('money', 'field13');
|
||||||
|
$builder->add('number', 'field14');
|
||||||
|
$builder->add('password', 'field15');
|
||||||
|
$builder->add('percent', 'field16');
|
||||||
|
$builder->add('radio', 'field17');
|
||||||
|
$builder->add('repeated', 'field18', array('identifier' => 'password'));
|
||||||
|
$builder->add('collection', 'emails', array(
|
||||||
|
'prototype' => 'text',
|
||||||
|
));
|
||||||
|
$builder->add('timezone', 'field19');
|
||||||
|
$builder->add('url', 'field20');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'my.form';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getParent(array $options) {
|
||||||
|
return 'form';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyTestObject
|
||||||
|
{
|
||||||
|
private $emails = 'test,foo,bar';
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyTestSubFormConfig extends AbstractFieldType
|
||||||
|
{
|
||||||
|
public function configure(FieldBuilder $builder, array $options)
|
||||||
|
{
|
||||||
|
$builder->add('text', 'subfield0');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'my.sub_form';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getParent(array $options) {
|
||||||
|
return 'form';
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user