मेरे पास ज़ेंड फ्रेमवर्क से संबंधित कुछ प्रश्न हैं। मैं अब डिफ़ॉल्ट displayAction()
विधि का उपयोग कर सभी स्थिर पृष्ठों को डिफ़ॉल्ट नियंत्रक के माध्यम से रूट करने का प्रयास कर रहा हूं। इसका इरादा displayAction()
page
परम देखकर अनुरोध को संसाधित करना है, यह निर्धारित करें कि स्क्रिप्ट पृष्ठ मौजूद है या नहीं, अगर यह दृश्य प्रस्तुत करता है अन्यथा 404 पेज को त्रुटि नहीं मिलती है। इसके अतिरिक्त, यह देखने के लिए एक परीक्षण किया जाता है कि क्या समान नाम वाला एक विधि मौजूद है, यदि ऐसा है, तो उस क्रिया पर कॉल करें।अपडेटेडः ज़ेंड फ्रेमवर्क में स्थिर सामग्री के प्रबंधन के लिए सर्वोत्तम अभ्यास?
यहां सूचीबद्ध application.ini
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
यहाँ से रूटिंग कॉन्फ़िगरेशन है नियंत्रक कार्रवाई:
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);
}
}
अब, यहाँ मेरी प्रश्न हैं: वहाँ की एक बेहतर तरीका है यह कर रहा हूं? मैं इस ढांचे के लिए अपेक्षाकृत नया हूं, ऐसे में सर्वोत्तम प्रथाएं लागू होती हैं? क्या नियंत्रक के भीतर से कार्रवाई करने का कोई बेहतर तरीका है? मैंने दस्तावेज के माध्यम से चारों ओर देखने के लिए बहुत कुछ किया है, हालांकि, इसमें से कुछ ऐसा खुद का विरोधाभास प्रतीत होता है।
अद्यतन 1:
एक थिंक और पढ़ने के बाद, मैं समाधान को आसान बनाने में कामयाब रहे और कुछ चीजें जो उल्लेख किया गया था शामिल है। नोट: मैं अपने डिफ़ॉल्ट स्थैतिक-सामग्री नियंत्रक के रूप में PagesController
का उपयोग करता हूं।
यहां सूचीबद्ध application.ini से रूटिंग कॉन्फ़िगरेशन है। होम पेज पर कॉल के लिए यानी "/", मैं अन्य सभी अनुरोधों के लिए action
परम के रूप में "घर" पास करता हूं, उपयोगकर्ता परिभाषित/यूआरएल लिंक परम action
में भेजा जाता है।
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"
यहां नियंत्रक क्रियाएं हैं। यदि उपयोगकर्ता परिभाषित करता है पैरामीटर एक क्रिया के रूप में मौजूद है, तो इसे कहा जाएगा, अन्यथा यह php जादू फ़ंक्शन __call पर पड़ता है।
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);
}
}
यह काम करता है। तो, यहां मेरे प्रश्न हैं: क्या आप स्थिर सामग्री का प्रबंधन करने के लिए इस विधि का उपयोग करने पर मानकीकरण पर विचार करेंगे? यदि नहीं, तो क्यों नहीं? आप इसे कैसे सुधारेंगे? इसके अलावा, यह एक जीईटी अनुरोध है, क्या यह इनपुट को शुद्ध करने के लिए Zend_Filter_input का उपयोग करने के लिए एक बुद्धिमान कदम होगा या यह सिर्फ ओवरकिल है?
प्रतिक्रिया के लिए धन्यवाद, मैं निश्चित रूप से इसमें एक नज़र डालेगा। – Hegemon