2012-08-02 21 views
7

Benim routing.yml'ım her bir rotada _locale gereksinimlerini belirledim ve bu durumu basitleştirmek için bir şey olmalı diye düşünüyorum. Ben 3Symfony2 Rota global {_locale} gereksinimleri

mümkün mü Symfony2.1 beta kullanıyorum

routing.yml

ProjectBaseBundle_index: 
    pattern: /{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:index } 
    requirements: 
     _locale: en|es 

ProjectBaseBundle_privacy: 
    pattern: /privacy/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 
    requirements: 
     _locale: en|es 

..... 

ProjectBaseBundle_legal: 
    pattern: /legal/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 
    requirements: 
     _locale: en|es 

tüm yolları için küresel _locale gereksinimlerini belirlemek için?

+0

Symfony'nin hangi sürümü üzerinde çalışıyorsunuz? – j0k

+0

Symfony 2.1, bahsetmedim çünkü bu çerçevenin "eski" bir işlevi olduğunu düşündüm – unairoldan

cevap

11

(Fabien'in göre) symfony 2.1 versiyonunun beta 4 çalıştıran olması gerekir. Paketlerim genellikle çok fazla bilgiye sahip olduğundan, kontrolörleri, kaynakları ve yolları farklı "modüller" lerde ayıyorum. Bu yaklaşımın sonucu olarak, bu keşfettim:

Usta bu yönlendirme yapılandırmayla-default.yml yönlendirme

ProjectBaseBundle_default_privacy: 
    pattern: /privacy 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 

ProjectBaseBundle_default_legal: 
    pattern: /legal 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 

ProjectBaseBundle_default_usage: 
    pattern: /usage 
    defaults: { _controller: ProjectBaseBundle:Default:usage } 

ProjectBaseBundle_default: 
    resource: "@ProjectBaseBundle/Resources/config/routing-default.yml" 
    prefix: /{_locale}/project/ 
    requirements: 
     _locale: en|es|de|fr 

Çocuk routing.yml, ben en aza indirmek yerel gereksinimleri yazması gereken yerler.

+1

Bu harika bir çözüm. Teşekkürler. –

+1

Bu çok kullanışlıdır. Ama ben dolaşırım. Yerel olarak bir tanesinin varsayılan olarak (yani 'es') olmasını isteseydim, bu yüzden/müstehcen/{_ locale} /. .. Diğer bölge için yollar. 'Master' routing.yml? 'Da söylemek için bir yol var mı? Varsayılan bir _locale ile çalışıyorum ... ama isteksiz bir düşünceye dönüştü. saygılarımla – javigzz

+0

Bunu nasıl yapacağımı bulamadım. Bir yolu daha önce/_locale/parametresiyle içe aktardıktan sonra, onu kullanmak gereklidir. – unairoldan

0

Bu tartışma bir göz atın:

https://groups.google.com/forum/#!topic/symfony-devs/6oxsa7whBps

O İhtiyacınız ne benzer bir şey yapmak mümkün gibi görünüyor, {_locale} parametresi başında belirtilen yalnızca o rota, sonunda değil.

yönlendirme yapılandırma aktarmak için bir "ana" yönlendirme kullanma: Ayrıca Bunu yapmanın bir yolunu keşfettiler

+0

Bu tartışmayı görmüştüm ama Haziran 2011'de çıkmış – unairoldan