Menü oluşturma deseni


9

Menü yönlendirme için kullanılmadığında kafamı bir menünün aktif durum işleyişine sokarken sorun yaşıyorum.

Menü sisteminin yönlendirmeyi de işlediği Drupal'dan geliyorum. böylece aktif durum ve aktif iz durumunun ayarlanması rota tarafından gerçekleştirilir (bu aynı zamanda bir menü oluşturma sistemi olarak da işlev görür).

Şimdi, birçok PHP çerçevesinin yönlendirmeyi işleyen Yönlendirici sınıfları vardır. Bir menü POST farkında olmamalıdır çünkü bu iyi bir ayrılık gibi görünüyor || SEÇENEKLER || ... istekleri.

Ama ön uç yazarken, kendimi zor menü kodlama bulundu. Veya DB'deki her şeyi depolamak ve bu değerleri bir görünüme geçirmek. Bu yaklaşımı sevmiyorum, Yönlendiricinizde zaten yazdığınızın bir kopyasını oluşturuyorsunuz, ancak şimdi Menu sınıfını kullanıyorsunuz.

Bir örnek:

Route::get('/somewhere','routename.somewhere','showStuffController');
Route::post('/somewhere','routename.somewhere','saveStuffController');

Menu::add('label.somewhere','routename.somewhere');

Endişeleri burada ayırıyorsunuz, bu güzel. Ancak Menü etkin durumunu ayarlamak için Rota'ya büyük ölçüde bağlıdır. Menü ayrıca aktif iz ayarlamak için hiyerarşi hakkında bilmek zorunda kalacak.

Yani evet, aktif iz ve aktif durum sınıfları ayarlamak aslında bir görünüm. Ama sahip olmak

if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; }

tüm görüşleriniz aptalca görünüyor. Sonra varsa tüm bu can sıkıcı aktif iz ekleyin ve bu gerçek bir şişkinlik. Görünüm görüntülenmeden ve aktif bir iz bayrağı doğru olarak ayarlandığında, bildiğim kadar çirkin görünüyor (tüm çocuklar üzerinde döngü yapan tüm çocuklar üzerinde bir foreach döngü, ...)

Sorum şu:

Bunu daha temiz, daha iyi hale getirmek için bir model veya akıllı bir yol var mı? Aktif iz 'problemi' nasıl ele alınmalı?

Çocuk yetiştirmeyi düşünüyordum -> ebeveyn. Bu yüzden reklamla en derin düzeyde başlayın ve ardından yoluma devam edin. Ama sonra çocuk ebeveynini biliyor, ancak ebeveyn çocukları hakkında hiçbir şey bilmiyor (garip görünüyor).

Yanıtlar:


1

menü yönlendirme için kullanılmadığında

O yönlendirme söyleyebilirim olabilir menüsü için kullanılacak.


Zaten işaret ettiğiniz gibi, yönlendirici takmak için iyi bir yer olacaktır. Her istekte mevcut sayfa için menü meta değerini değerlendiren bir kanca kullanmanın çirkin olacağını düşünmüyorum.

Görüşlerinizi aktif durumu izlemekten sorumlu yaparsanız endişelerinizi ayırmazsınız. Görünümler ne için yapıldıysa yapsın - ancak menü durumlarını da yönetmeleri gerekli değildir. Menü meta verileri genellikle uygulama genelinde aynıdır ve yalnızca kendinizi bulabilmek ve menüyü oluşturabilmek için rotaya ihtiyacınız vardır.

Yönlendiricinize ve ihtiyaçlarınıza bağlı olarak, bazı statik menü meta verilerini alan basit bir işlev veya sınıfa ve geçerli rota, daha sonra ihtiyacınız olan tüm bilgileri sağlamak için yeterli olacaktır.

Menu meta'sının kendisi bir nesne olmamalıdır. Çoğu durumda yöntemsiz basit bir anahtar değer veri yapısı yeterli olmalıdır.

Kanca, ekmek kırıntıları, derinlik, üst sayfa veya geçerli sayfa gibi menünüzle ilgili bazı ortak işlevlere sahip bir durum nesnesi oluşturabilir ve bu nesneyi http isteğiniz bağlamında tanıtabilir. Kancanın içinde farklı olasılıklarınız var - ancak genellikle bununla nasıl başa çıkılacağını bilen bir şeye gerekli verileri toplamak, hazırlamak ve aktarmakla ilgilidir.

Bu yaklaşım ihtiyaçlarınıza göre ölçeklenir ve birkaç avantajı vardır:

  1. Veritabanınızın çalışma zamanında düşük maliyetlerle sağlayabileceğiniz verilerle uğraşmasına gerek yoktur
  2. Menünüzü (meta) tek bir yerde tutabilirsiniz, bu da onu sürdürülebilir kılar
  3. Menünüzün rotalarınıza tamamen 1: 1 güvenmesini istiyorsanız, menü meta dinamik olarak sağlanarak erişilebilir
  4. İçeriğiniz büyürse (ve dolayısıyla menü), bu verileri bir hızlı anahtar değer deposuna yazılabilecek oturuma taşıyabilirsiniz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.