1
我有一個網站,我想用兩個模塊。默認& api。該網站運行的默認和工作正常(http://localhost)。但我試圖使用這樣的模塊(http://localhost/api/other-params)。但它仍然加載網站。兩條路線我都設置這樣的:Zend Framework使用模塊
'apiDivisionStandings' => array(
'type' => 'Zend_Controller_Router_Route',
'route' => 'api/division/standings/:userID',
'defaults' => array(
'module' => 'api',
'controller' => 'division',
'action' => 'standings'
)
),
'defaultSchoolSize' => array(
'type' => 'Zend_Controller_Router_Route',
'route' => ':state/:size/schools',
'defaults' => array(
'module' => 'default',
'controller' => 'school',
'action' => 'size'
)
),
在我的引導文件:
Zend_Date::setOptions(array('format_type' => 'php'));
Zend_Layout::startMvc(array('layout' => 'website/default' , 'layoutPath' => APPLICATION_PATH . '/default/layouts' , 'contentKey' => 'content'));
$routes = new Zend_Config(Routes::getRoutes());
$router = new Zend_Controller_Router_Rewrite();
$router->addConfig($routes, 'routes');
$this->bootstrap('frontController');
$frontController = Zend_Controller_Front::getInstance();
$frontController->setRouter($router);
$cOpts = array('lifetime' => 99000 ,'automatic_serialization' => true);
Zend_Registry::set('cache', Zend_Cache::factory('Core', 'File', $cOpts, array('cache_dir' => '../cache/')));
在我的index.php之前,我引導() - >運行();
require_once '../library/Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);
$loader->registerNamespace('Api_');
我的application.ini:
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/default/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
最後,我在應用程序/模塊/ API /控制器文件夾DivisionController(該網站的東西是在應用程序/模塊/默認的一部分;工作正常):
class Api_DivisionController extends Zend_Rest_Controller
{
/**
* - Class setup
* - Tells framework not to render to view
* - sets default data type to JSON
*/
public function init()
{
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->contextSwitch()
->addActionContext('standings', array('xml','json'))
->addActionContext('news', array('xml', 'json'))
->setAutoJsonSerialization(true)
->initContext();
}
但不是在頁面上獲取JSON響應我得到的網頁加載錯誤消息,它無法找到視圖。我錯過了什麼?
這工作得很好。謝謝。我在Api_DivisionController的init()中的代碼並沒有停止渲染網站,它試圖繼續加載網站。我必須在我的echo json_encode($ array)之後放置一個出口;但是爲什麼init()函數,知道它是在我的方法中創建斷點時調用的,並沒有阻止ZF嘗試渲染頁面而不是返回json響應。謝謝! – Nathan 2010-04-10 03:20:13
contextSwitch助手將特別啓用帶有json.phtml擴展名的模板,因此它可能會覆蓋setNoRender調用。聽起來你正在做的工作正常,但如果你想改變這一點,你可以將setNoRender調用移動到contextSwitch之後,然後在你的動作中做這樣的事情:$ this-> getResponse() - > setBody ($ yourJsonStuff);而不是:echo $ yourJsonStuff;出口; – 2010-04-10 18:11:49
謝謝你的幫助! – Nathan 2010-04-27 22:16:12