2017-05-17 7 views
0

私は、ドキュメントのワークフローに従うためにsymfonyでアプリケーションを開発しています。ドキュメントのライフサイクルでは、さまざまな部門を取ります。つまり、各部門の担当者がアプリケーション内で独自の役割を果たしています(ROLE_USERROLE_SYSTEMS ...)。私はすべて同じフォームを持っていますが、ドキュメントのライフサイクルのさまざまな状態で、そのうちの1つは特定のフィールドを完了しなければならず、残りは無効または読み込み専用になります。symfonyはユーザロールに応じてフォームフィールドを無効にします

私はSymfonyでこれを行う最良の方法が何であるか知りたいのですが、ライフサイクルのたびにユーザが編集できないファイルを無効にしてください。

私の小枝テンプレートのようなものを調査して見つけましたが、各フィールドと各ロールでこれを行う必要があります。これを無効または読み取り専用などのフィールド属性に適用できるかどうかはわかりません。それ?。

{{% if is_granted('ROLE_ADMIN') %} 
    <a href="...">Delete</a> 
{% endif %} 

私はまた、有権者の話を聞いたが、私はそれが私の状況に適しているならば、それは動作し、どのように非常に明確ではありません。

あなたはどう思いますか?

+0

を私は有権者の詳細を学び、私はそれができると思いますユーザーの役割とドキュメントのライフサイクルの状態を比較して、どのフィールドがログに記録されたユーザーを編集できるかを知っているだけであれば解決策になります。 – JEnriquePM

+0

さて、私は文書オブジェクトの状態とログに記録されたユーザーの役割をチェックする有権者をコード化しました。今私の質問は、有権者はクラス文書に関連していなければなりませんか?私はそれが定義されている属性で私の場合は '編集'が必要などこでも有権者を呼び出すことができますが、私は何かが間違っているか無効になっているかわかりません。私の最初の有権者は、私と親切です。 XD。私はコードを投稿する必要がありますか? – JEnriquePM

+0

私は前に投稿するのを忘れてしまった、私はそれをやりたい役割にアクセス権を与えるために投票者と私の問題を解決した、私はすべてのフィールドにアクセスを許可する投票者と文書の所有者とダブルckeckを行う個別にしたい。誰かがソリューションに関心を持っていたり、有権者がコードを投稿することができたら、今は時間がかかりません。 – JEnriquePM

答えて

0

簡単ではあるが醜いやり方は、異なるフォームタイプのクラスになります(必要なフィールドとそうでないフィールドを見つけるために遊んでいますが、オプションです)。

FormEventsは、PRE_SET_DATAのように、追加/削除することができます(modifienも利用可能かどうかはわかりません)。

Look here to find out more -> How to Dynamically Modify Forms Using Form Events

基本的には、次の試してみてください:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    // Add your general fields which are available for all 
    //$builder->add(...) 

    // at the end add an EventListener 
    $builder->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'onPreSetData']); 
} 

と同じフォームクラスでonPreSetDataメソッドを作成:

public function onPreSetData(FormEvent $formEvent) 
{ 
    $form = $formEvent->getForm(); 
    $entity = $formEvent->getData(); 

    //if user is admin then $form->add(...) like above in with $buildForm->add(...) 
} 
関連する問題