2012-02-28 5 views
8

Я хотел бы использовать поставщиков услуг Silex только для создания простой формы контакта с проверкой, но, похоже, она работает только с поставщиком услуг перевода, потому что когда я визуализирую представление, у меня есть Twig_Error_Syntax 'The filter' trans "не существует", я думаю, это потому, что я должен настроить (переопределить) 'form_div_layout.html.twig' и удалить транс-фильтр? Мне не нужен перевод.Проверка формы Silex без перевода

Я еще не реализовал проверку.

Вот мой код:

use Symfony\Component\HttpFoundation\Request ; 
use Symfony\Component\HttpFoundation\Response ; 

require_once __DIR__ . '/bootstrap.php' ; 

$app = new Silex\Application() ; 

require __DIR__ . '/../config/conf.php'; 

$app->register(new Silex\Provider\SymfonyBridgesServiceProvider(), array(
     'symfony_bridges.class_path' => __DIR__ . '/../vendor/symfony/src', 
)) ; 

$app->register(new Silex\Provider\HttpCacheServiceProvider(), array(
     'http_cache.cache_dir' => __DIR__ . '/../cache/', 
)) ; 

$app->register(new Silex\Provider\FormServiceProvider(), array(
     'form.class_path' => __DIR__ . '/../vendor/symfony/src' 
)) ; 

$app->register(new Silex\Provider\ValidatorServiceProvider(), array(
     'validator.class_path' => __DIR__ . '/../vendor/symfony/src', 
)) ; 

$app->register(new Silex\Provider\TwigServiceProvider(), array(
     'twig.path' => __DIR__ . '/../src/views/frontend/', 
     'twig.class_path' => __DIR__ . '/../vendor/twig/lib', 
     'twig.options' => array('cache' => $app['http_cache.cache_dir'] . 'twig.cache'), 
)) ; 

$app->get('/contact', function (Silex\Application $app) use ($navigation) { 

     $form = $app['form.factory']->createBuilder('form') 
       ->add('name', 'text') 
       ->add('surname', 'text') 
       ->add('email', 'email') 
       ->add('message', 'textarea') 
       ->getForm() ; 

     $response = new Response() ; 
     $page = $app['twig']->render('contact.html.twig', array('navigation' => $navigation, 'form' => $form->createView())) ; 
     $response->setContent($page) ; 
     return $response ; 
    }) ; 

и в контактной странице:

<form class="form-horizontal" action="/contact" method="post"> 
<fieldset class="control-group"> 
       <legend>Contact</legend> 

        {{ form_errors(form) }} 
        {{ form_row(form.name) } 
        {{ form_row(form.surname) }} 
        {{ form_row(form.email) }} 
        {{ form_row(form.message) }} 

    <button type="submit" class="btn btn-info">Send</button> 

</fieldset> 
</form> 

ответ

1

Решение состоит в том, чтобы настроить макет формы, удалив транс фильтры

+4

Не могли бы вы привести пример того, как это сделать? –

+2

Как бы то ни было, этот ответ не дает достаточного объяснения. – Jimbo

1

я смог обойти ошибки перевода, сделав это:

$app = new Silex\Application(); 
$app['translator.messages'] = array(); 
5

Другой способ сделать это было бы обеспечить Twig с фильтрами ...

function dummy_trans($str) { 
    return $str; 
} 

$app['twig']->addFilter('trans*', new Twig_Filter_Function('dummy_trans')); 

(N.B) звездочка означает динамический Twig фильтр, по существу уайлдкард.

Я проверил это очень кратко, но, похоже, выполняет эту работу.

+0

+1, так как это, кажется, единственное решение, которое не зависит от «Силекса». Он может быть дополнительно улучшена за счет использования анонимной функции, например .: $ viewEnvironment-> AddFilter ( 'транс *', новый \ Twig_Filter_Function ( функция ($ строка) { возвращение $ ул, } ) ); –

+0

Это не работает для полей формы выбора, то есть для фильтра transChoice. Symfony [IdentityTranslator] (https://github.com/symfony/Translation/blob/2.3/IdentityTranslator.php#L73) показывает, что есть немного больше работы, чтобы сделать правильный перевод идентичности для списка переводов. – flu

24

Есть такая же проблема, и я был в состоянии решить эту проблему, добавив:

$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'translator.messages' => array(), 
)); 
+2

+1 для правильного решения проблемы! – Besnik

+0

Просто заметьте, мне пришлось поставить это в верхней части регистрации поставщиков услуг, как это делалось после того, как проблемы доктрины/ветки/формы/валидатора/актива вызвали проблемы. Сделайте это ближе к началу при создании своих поставщиков услуг, и все должно идти хорошо. – Jimbo

2

Указывается в Silex documentation:

Если вы не хотите, чтобы создать свой собственный макет формы , это нормально: будет использоваться по умолчанию. Но вам нужно будет зарегистрировать поставщика перевода, поскольку это требует макет формы по умолчанию.

Так все, что вам нужно сделать, если вы хотите использовать раскладку по умолчанию, является следующее:

$app->register(new Silex\Provider\TranslationServiceProvider()); 
Смежные вопросы