8

Silexのサービスプロバイダーを使用して、検証付きの単純な連絡フォームを作成したいのですが、ビューをレンダリングするとTwig_Error_Syntaxが存在するため、翻訳サービスプロバイダーのみのようです'フィルター"trans"は存在しません'、I 'form_div_layout.html.twig'をカスタマイズ(オーバーライド)してトランスフィルターを削除する必要があるためだと思いますか?翻訳は必要ありません。

まだ検証を実装していません。

これが私のコードです:

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

5 に答える 5

24

同じ問題が発生し、次のように追加することで解決できました。

$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'translator.messages' => array(),
));
于 2012-10-16T10:14:34.833 に答える
5

これを行う別の方法は、Twigにフィルターを提供することです...

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

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

(NB)アスタリスクは、動的Twigフィルター、本質的にはワイルドカードを示します。

私はこれをごく簡単にテストしただけですが、仕事をしているようです。

于 2012-08-09T16:40:27.463 に答える
2

Silexのドキュメントに記載されています:

独自のフォームレイアウトを作成したくない場合は、問題ありません。デフォルトのレイアウトが使用されます。ただし、デフォルトのフォームレイアウトで必要になるため、翻訳プロバイダーを登録する必要があります。

したがって、デフォルトのレイアウトを使用する場合は、次のようにする必要があります。

$app->register(new Silex\Provider\TranslationServiceProvider());
于 2014-08-31T10:50:52.457 に答える
1

解決策は、トランスフィルターを削除してフォームレイアウトをカスタマイズすることです

于 2012-03-01T20:15:25.583 に答える
1

これを行うことで、翻訳エラーを回避することができました。

$app = new Silex\Application();
$app['translator.messages'] = array();
于 2012-04-20T04:07:52.750 に答える