2016-03-21 2 views
2

ビルドフォームに次のコードがありますが、'report_abuse'の変換を取得したいのですが、方法が見つかりません。出来ますか ?symfonyフォームでデータ値を変換する方法

class AbuseType extends AbstractType 
{ 
    // ... 

    $builder->add('subject', TextType::class, array(
     'label' => 'label.subject', 
     'data' => 'report_abuse', 
     'disabled' => 'true', 
    )) 

    // ... 
} 
+0

翻訳ファイルの1つに 'report_abuse'を追加しましたか?入力フィールド 'subject 'に表示される値を変換したいと思っていますか? – Baig

+0

はいxlfファイルにreport_abuseを追加しました。はい、フィールドに表示されている値を変換したかったので、オブジェクトに挿入する前に値を変換するようになりました。私は以下の質問に答えました。 – Laurent

答えて

1

は、明示的にtranslation_domainを設定してください:

$builder->add('subject', TextType::class, array(
    // ... 
    'translation_domain' => 'messages', 
)) 

あなたはまたにこのメソッドを追加することによって、全体FormTypeのためにそれを行うことができます:それは動作しない場合

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{  
    $resolver->setDefaults(array(
     'translation_domain' => 'messages' 
    )); 
} 

、あなたのFormTypetranslatorを登録して登録してください。as a service

# services.yml 
services: 
    app.form.type.abuse: 
     class: AppBundle\Form\Type\AbuseType 
     arguments: [ "@translator" ] 
     tags: 
      - { name: form.type } 

コールを直接翻訳者:

use Symfony\Component\Translation\TranslatorInterface; 

class AbuseType extends AbstractType 
{ 
    public function __construct(TranslatorInterface $translator) 
    { 
     $this->translator = $translator; 
    } 

    // ... 

    $builder->add('subject', TextType::class, array(
     'label' => 'label.subject', 
     'data' => $this->translator->trans('report_abuse', array(), 'messages'), 
     'disabled' => 'true', 
    )) 
} 
+0

あなたの答えをありがとう。最初の2人は働いていません...私は翻訳のために「あまりにも多い」3番目の部分は使用しません。他の部分はすべて正しく翻訳されますが、サービスの例としてそのまま残します。 – Laurent

+0

私は理解できますそれはあなたにとって大変だが、このオプションの価値を本当に翻訳する必要がある場合は、翻訳者が必要なので、あなたのタイプでそれを取得する必要があります。 – chalasr

+0

これは "過剰な"問題ではありませんが、Symfonyがデータをラベルとして翻訳する可能性を許可/設定していないのは、理由のためです(いずれか?)。だから私は、翻訳する必要がないなど、別の方法を見つけることを好む。しかし、本当にありがとうございました。 – Laurent

0

は、これは私がやったことです。私はAbuseクラスにそのサブジェクトを注入しました。その値は、デフォルトでフォームを作成するために取られます。私はまた、フィールドを無効にする代わりに読み取り専用で設定しているため、フィールドは送信されません。

//FormController.php 
    class FormController extends Controller 
    { 
     //... 
     public function abuseAction(Request $request) 
     { 
      $subject = $this->get('translator')->trans('report_abuse'); 
      $abuse = new Abuse($subject); 
      //... 
     } 
     //... 
    } 

//Abuse.php 
    class Abuse 
    { 
     //... 

     public function __construct($subject) 
     { 
      $this->setSubject($subject); 
     } 

    //... 
    } 

//AbuseType.php 
class AbuseType extends AbstractType 
{ 
    //... 

    $builder->add('subject', TextType::class, array(
     'label' => 'label.subject', 
     'attr' => array(
      'readonly' => true, 
     ))) 

    //... 
}