3

この問題は非常に一般的で、SO では何度も発生しますが、Symfony2 フレームワークでは発生しません。次のように、ドメインの直後にユーザー名を指定してユーザー プロファイルにアクセスするルートを作成したいと考えていますdomain.com/username。ルートは次のようになります。

Profile:
    pattern: /{pseudo}
    defaults: { _controller: **Bundle:Default:member } 

しかし、この敗走が のような他の多くの敗走になることは明らかです/main。ドキュメンテーションによると、疑似を正確に En または Fr にするなど、パターンにいくつかの制限を加えることができます。

Profile:
    pattern: /{pseudo}
    requirements:
        pseudo:  en|fr

これを使用して、疑似ルートを他の同様のルートと等しくないようにすることができますmain , messages , post , blogが、多くのルートがある場合、ルーターは見苦しくなります。これが有効な方法である場合は、要件を等しくしない main, messages,...ようにする方法を示してください 。または、別の方法があります。それを知っていただければ幸いです。

4

1 に答える 1

3

おそらく、ルーティングレベルではなく、ユーザー登録プロセスで制限する必要があります。/{pseudo}ルートを他のすべてのルート(またはルートなど)の後に配置すると、パターンは他のルートのいずれにも一致しないすべてのリクエストにのみ一致します。/main/messages

例えば

main:
    pattern: /main
    defaults:  { _controller: YourBundle:Main:show }

% put all the other routes here

% your very last route
pseudo:
    pattern: /{pseudo}
    defaults:  { _controller: YourBundle:User:show }

最後のルートに、たとえば8文字と英数字のみ、または正規表現で好きなものだけを含めるという要件を追加することもできます。

requirements:
    pattern: ^\[a-z0-9]{,8}$

ただし、要件を介してアクセスを本当に制限したい場合は、一部の名前を許可しない要件正規表現を追加するだけで済みます。それでも、次のことをしないことを強くお勧めします。

requirements:
    pattern: ^(?!main|messages|...)$ 

これについては、ドキュメントでも詳しく説明されています。

于 2012-08-01T10:22:13.547 に答える