Проверка формы Silex без перевода - PullRequest
8 голосов
/ 28 февраля 2012

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

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

Вот мой код:

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>

Ответы [ 5 ]

24 голосов
/ 16 октября 2012

Возникла та же проблема, и я смог ее решить, добавив:

$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'translator.messages' => array(),
));
5 голосов
/ 09 августа 2012

Еще один способ сделать это - предоставить Twig фильтры ...

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

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

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

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

2 голосов
/ 31 августа 2014

Это указано в документации Silex :

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

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

$app->register(new Silex\Provider\TranslationServiceProvider());
1 голос
/ 20 апреля 2012

Мне удалось обойти ошибки перевода, выполнив это:

$app = new Silex\Application();
$app['translator.messages'] = array();
1 голос
/ 02 марта 2012

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

...