Diyelim ki gibi görünen bir eylem http://site.com/admin/posts/edit/5
gibi bir adresi eşler bir PHP Model-View-Controller çerçeve var diyelim
Posts_Controller::editAction($id)
dosyasında /admin/controllers/posts.php
Şimdi, ben baktım birçok mevcut PHP çerçeveler benzer bir şey bu başarmak istiyorsunuz
$module = Router::getModule(); // "admin"
$controller = Router::getController(); // "posts"
$action = Router::getAction(); // "edit"
$params = Router::getParams(); // array(5)
$controller_file = "/".$module."/controllers/".$controller.".php";
$controller_classname = ucfirst($controller)."_Controller";
$method = $action."Action";
require_once $controller_file;
$controller_obj = new $controller_classname();
call_user_func_array(array($controller_obj,$method),$params);
Bana göre, bu kötü kokuyor ve çok "büyülü" gibi görünüyor: Ben dinamik olarak bir dize kapalı tabanlı sınıflar oluşturmak mümkün olmalıdır inanmıyorum, o dizeleri olarak belirtilen bu metodlarını çağırır.
Ayrıca da kötü kokuyor eylemleri, aramak için yansıma kullanmak alternatifler gördük.
Şimdi daha büyük, modüler CMS her bir "sayfa" tipi için DB bir tablo vardır benzer bir MVC çerçevesinde kapalı inşa sahip hayal: blog, statik, fotoğraf albümü, vs .. Bunun için bir uygulama olduğunu hayal benim önceki örneğe benzer.
Ben bu kötü olduğunu düşünüyor tek ben miyim? Eğer değilse, bu durumu kapsayacak bir tasarım modeli olmamalıdır?
To Clarify:
Modülü, denetleyici, eylem hakkında bilgi içeren bir sorgu haritasına bazı good yolu var mı, ve parametreler içine
- Eklemek için bir dosya
- Örneğini A sınıfı
- 'Aramak için bir yöntem
Yani mümkün olduğunca little "sihirli" (dize sınıf-veya-to-yöntemi veya yansıması) olarak kullanır?
Daha da iyisi: bu nasıl yansıma olmadan, C # veya Java yapılabilir ki? Ben bir dosya konumuna gelmesi dizeleri bitiştirmek için izin verebilirsiniz.