Zend Framework ile ilgili bazı sorularım var. Tüm statik sayfaları varsayılan varsayılan displayAction()
yöntemini kullanarak yönlendirmeyi deniyorum. Amaç, page
paramına bakarak isteğin displayAction()
işlemine sahip olması, komut sayfasının var olup olmadığını belirlemektir, aksi takdirde görünüm 404 sayfalık bir hata bulamadı. Ek olarak, param ile aynı ada sahip bir yöntemin var olup olmadığını görmek için bir test yapılır, eğer öyleyse, bu eylemi çağırınız. Burada ListelenenGüncelleme: Zend Framework'de statik içeriği yönetmek için en iyi yöntemler?
denetleyici eylemleri application.ini İşte
resources.router.routes.static-pages.route = /:page
resources.router.routes.static-pages.defaults.module = default
resources.router.routes.static-pages.defaults.controller = index
resources.router.routes.static-pages.defaults.action = display
gelen yönlendirme yapılandırması olduğunu: Artık
public function someAction() {
// do something
}
public function displayAction() {
// extract page param, e.g. 'some'
$page = $this->getRequest()->getParam('page');
// create zend styled action method, e.g. 'someAction'
$page_action = $page.'Action';
// if a method within this controller exists, call on it
if (method_exists($this, $page_action)) {
$this->$page_action();
}
// if nothing was passed in page param, set to 'home'
if (empty($page)) {
$page = 'home';
}
// if script exists, render, otherwise, throw exception.
if (file_exists($this->view->getScriptPath(null)."/".$this->getRequest()->getControllerName()."/$page.".$this->viewSuffix)) {
$this->render($page);
} else {
throw new Zend_Controller_Action_Exception('Page not found', 404);
}
}
, benim sorular şunlardır: daha iyi bir yolu arasında var mı Bunu yapıyor? Bu çerçeveye nispeten yeniyim, bu yüzden geçerli olan en iyi uygulamalar var mı? Bir denetleyiciden bir eylemi çağırmanın daha iyi bir yolu var mı? Belgelere baktığımda çok fazla şey yaptım, ancak bunun bir kısmı kendini çelişiyor gibi görünüyor.
Güncelleme 1:
bir düşünmek ve bir okuma yaptıktan sonra çözüm basitleştirmek başardı ve bahsedildi birkaç şey dahil ettik. NOT: PagesController
'u varsayılan statik içerik denetleyicim olarak kullanıyorum.
Burada listelenen yönlendirme yapılandırması application.ini. "/" Ana sayfasına yapılan çağrılar için "ev" i action
param olarak geçiyorum, diğer tüm istekler için, kullanıcı tanımlı/url bağlantı parametresi action
içinde gönderilir.
resources.router.routes.home.route = "/"
resources.router.routes.home.defaults.module = "default"
resources.router.routes.home.defaults.controller = "pages"
resources.router.routes.home.defaults.action = "home"
resources.router.routes.pages.route = "/:action"
resources.router.routes.pages.defaults.module = "default"
resources.router.routes.pages.defaults.controller = "pages"
Denetleyici eylemleri İşte. Eğer kullanıcı parametre tanımlaması bir eylem olarak mevcutsa, çağrılır, aksi takdirde php sihirli işlevi __call'a düşer.
public function someAction()
{
// Do something
}
public function __call($method, $args)
{
// extract action param, e.g. "home"
$page = $title = $this->getRequest()->getParam('action');
// test if script exists
if (file_exists($this->view->getScriptPath(null) . "/"
. $this->getRequest()->getControllerName() . "/$page . " . $this->viewSuffix))
{
// pass title to layout
$this->view->assign(compact('title'));
// render script
$this->render($page);
} else {
throw new Zend_Controller_Action_Exception('Page not found', 404);
}
}
Çalışıyor. Yani, işte benim sorularım: Statik içeriği yönetmek için bu yöntemi kullanmakta standartlaştırmayı düşünür müsün? Değilse neden olmasın? Bunu nasıl geliştirirsin? Ayrıca, bu bir GET isteğidir göz önüne alındığında, Zend_Filter_input girişini temizlemek için akıllıca bir hareket mi yoksa sadece aşırı mı?
Geri bildiriminiz için teşekkür ederiz, kesinlikle buna bir göz atacağım. – Hegemon