Использование модулей с Zend Framework - PullRequest
1 голос
/ 09 апреля 2010

У меня есть сайт, я пытаюсь использовать два модуля. по умолчанию и api. Сайт работает по умолчанию и работает нормально (http://localhost). Но я пытаюсь использовать модуль API, как это (http://localhost/api/other-params). Но он все еще загружает сайт. У меня есть два маршрута, которые настроены так:

        '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 до того, как я загрузился () -> run ();

require_once '../library/Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);
$loader->registerNamespace('Api_');

My 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"

И, наконец, часть моего DivisionController в папке application / modules / api / controllers (веб-сайт находится в application / modules / default; отлично работает):

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 на странице, я заставляю веб-страницу загружаться с сообщением об ошибке, что она не может найти представление. Чего мне не хватает?

1 Ответ

2 голосов
/ 09 апреля 2010

ZF соответствует маршрутам в обратном порядке, поэтому я предполагаю, что он http://localhost/api/params соответствует вашему маршруту по умолчанию, так как он проверяет это первым, и маршрутизатор не может знать, что 'api' не является действительным: состояние , Поэтому попробуйте изменить порядок своих маршрутов, чтобы API был последним (и, таким образом, проверялось первым).

Если это не сработает, попробуйте временно удалить маршрут по умолчанию и посмотреть, сработают ли запросы API. Если это не так, то это указывает на проблему с самим вашим маршрутом API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...