2013-03-15 20 views
8

Eski kod tabanımı Symfony 2.2 çerçevesine taşıyorum.İş mantığı nerede yerleştirilir Symfony 2 model katmanı?

Eski kodumda, nesne varlığım, geçerli makale için bir URL döndüren getUrl() yöntemine sahipti.

Symfony'de böyle bir URL oluşturmak için Router hizmetini kullanmalıyım.

Yönelticiye Kurumun içinden erişemiyorum, bu da kötü bir uygulama ve çerçeve tarafından gerçekten desteklenmiyor.

Ben Twig helper yol() kullanarak Twig şablonun kendisinden yönlendirici arayıp URL'yi oluşturmak için gerekli (Madde örneğinden) tüm argümanlar sağlayabilir. Ama bu yaklaşım çok iyi değil, çünkü URL biçimlendirme kurallarını değiştirmeye karar verirseniz - tüm bu çağrıları bulup yeniden yazmam gerekecek (çok DRY).

Gerçekten de iş mantığını kapsülleme işlemini burada kaydetmek ve tüm katmanları görüntü katmanına çekmemek istiyorum.

Bu durumda nasıl devam etmeliyim?

cevap

11

Hizmet katmanınızda bir ArticleManager sınıfı oluşturun ve orada herhangi bir iş mantığını işleyin. Bağımlılık enjeksiyonu yoluyla yönlendiriciye iletebilirsiniz. daki Örneğin

, ArticleManager (ya __construct veya ayrı ayarlayıcı yöntemi ile enjekte edilen) yönlendirici örneği kullanmak $article özelliklerine göre URL oluşturmak için, ve geri bir getUrl(Article $article) yöntemi sahip olacaktır.

Bu yöntem, iş mantığınızın görünümü veya denetleyici katmanlarını kirletmemesini sağlayacaktır.

Service Container docs numaralı telefonu okuduğunuzdan emin olun.

+0

Teşekkürler Arms! Bu yaklaşımı düşünüyordum, daha deneyimli birinin onayı gerekiyordu. Model sınıflarını başka bir sınıftan yönetme konusunda gerçekten rahat olduğumdan emin değilim, ancak bunun sadece geçerli bir seçenek olduğunu düşünüyorum. –

+0

Eğer Active Record ORM'den geliyorsanız, bu kesinlikle yabancı bir yaklaşım gibi hissettirir. Fakat zaman içinde endişelerin ayrılmasını ve daha önce nasıl yönettiğinizi merak edersiniz ;-) –

+0

@SlavaFominII Bu iyi bir çözümdür, ancak aynı "model" nesnesine sahipseniz, bunları aynı Manger'la birleştirin veya Uygulamanızın her varlığı için bir yönetici (yani bir servis) bulundurun ve bu bazen de desteksiz olamaz – DonCallisto