10

/プライバシー ポリシーを表示する公開ページを除いて、ルート パスの下にあるすべてのものを保護するようにセキュリティ設定をセットアップしました/privacy。すべて正常に動作します。

# security.yml
access_control:
    - { path: ^/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/,         role: ROLE_USER }

/privacyここで、ルートが からに変更されるように、プライバシー ポリシーのページにいくつかの異なる翻訳を追加しました/{_locale}/privacy。残念ながら、次の_localeようにパラメーターをセキュリティ パスに追加することはできません。

access_control:
    ...
    - { path: ^/{_locale}/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }

security.ymlでは、パスに を追加し、_locale事前定義された言語に制限できるように、どのように変更する必要があり(en|fr|es|de)ますか?

4

4 に答える 4

9

すべてのロケールが 2 文字のロケール ( en|fr|es|de|...) の場合、次のようなより一般的な正規表現を使用できます。

- { path: '^/[a-z]{2}/privacy$', role: 'IS_AUTHENTICATED_ANONYMOUSLY' }

security.access_controlこうすれば、新しいロケールを追加するたびに に触れる必要がなくなります。

フォームのロケールのEN_en場合、次のようなものを使用できます。

- { path: '^/[a-zA-Z]{2}_[a-zA-Z]{2}/privacy$', role: 'IS_AUTHENTICATED_ANONYMOUSLY' }
于 2013-11-05T12:58:59.823 に答える
8

私はこのような問題を解決することができました

access_control:
    ...
    - { path: ^/(en|fr|es|de)/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }

他の回答者への推奨事項: この文字列(en|fr|de)をすべてのルートに手動で入力する必要があります。言語を追加するとき、この文字列を何度も変更する必要があります。文字列を定義できればもっと良いでしょう

parameters:
    languages: "(en|fr|es|de)"

そして、これをルートで使用します

    - { path: ^/%languages%/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }

しかし、これはうまくいかないと思います。

于 2013-11-05T12:35:44.887 に答える