Zend_Application загрузчика


Это кажется немного неправильным, потому что есть много бизнес-логики происходит внутри загрузчика. Есть ли лучший способ для достижения того, что здесь происходит?

<?php

/**
 * Zend_Application Bootstrapper
 *
 * @copyright 2011 Case Western Reserve University, College of Arts and Sciences
 * @author Billy O'Neal III (bro4@case.edu)
 */

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    public function __construct($application)
    {
        parent::__construct($application);
        Cas_Ldap::SetGlobalOptions($this->getOption('ldapserver'), $this->getOption('ldapsearchbase'));
    }

    protected function _initLayout()
    {
        $layout = Zend_Layout::startMvc();
        $layout->setLayoutPath(APPLICATION_PATH . '/layouts/scripts');
        $layout->setLayout('layout');
        return $layout;
    }

    protected function _initView()
    {
        $this->bootstrap('db');
        $view = new Zend_View();

        //Set the version string with subversion revision if found.
        $version = '0.1';
        $svnPath = APPLICATION_PATH . '/../.svnrev';
        if (file_exists($svnPath))
        {
            $hFile = fopen($svnPath, 'r');
            $version .= '.' . fgets($hFile);
            fclose($hFile);
            $lastModTime = filemtime($svnPath);
            $dateTime = new DateTime('@' . $lastModTime, new DateTimeZone('America/New_York'));
            $version .= ' ' . $dateTime->format('o-n-j G:i') . 'Z';
        }
        $view->version = $version;

        // Setup Navigation

        $nav = array();
        $nav[] = array(
            'label' => 'Welcome',
            'controller' => 'index',
            'action' => 'index',
            'order' => -1
        );

        $loggedIn = Cas_Users_User::LoggedIn();

        $logxLink = array('controller' => 'User', 'order' => 1000);
        $logxLink['label'] = $loggedIn ? 'Logout' : 'Login';
        $logxLink['action'] = strtolower($logxLink['label']);
        $logxLink['pages'] = array(array(
            'controller' => 'User',
            'action' => 'AccessDenied',
            'visible' => false,
            'label' => 'Access Denied'
        ));
        $nav[] = $logxLink;

        $adminPermission = Cas_Acl_Privilege::CreateExisting('refreshAdmin');
        unset($hasAdmin);
        $hasAdmin = (bool)Cas_Users_User::CurrentPrivilegeCheck($adminPermission);
        $nav[] = array(
            'controller' => 'admin',
            'action' => 'index',
            'order' => 2,
            'label' => 'Administration',
            'visible' => $hasAdmin,
            'pages' => array(array(
                'controller' => 'admin',
                'action' => 'useradmin',
                'label' => 'User Administration',
                'order' => 1
            ),array(
                'controller' => 'admin',
                'action' => 'globalpermissions',
                'label' => 'System Permissions',
                'order' => 2
            ),array(
                'controller' => 'admin',
                'action' => 'editevents',
                'label' => 'Edit Events List',
                'order' => 3
            ),array(
                'controller' => 'template',
                'action' => 'index',
                'label' => 'Edit Templates',
                'order' => 4
            ), array(
                'controller' => 'admin',
                'action' => 'notauthorized',
                'label' => 'Access Denied',
                'visible' => false
            ), array(
                'controller' => 'admin',
                'action' => 'usermembership',
                'label' => 'User Membership Edit',
                'visible' => false
            ))
        );

        $nav[] = array(
            'controller' => 'faq',
            'action' => 'index',
            'order' => 3,
            'label' => 'Frequently Asked Questions'
        );

        if ($loggedIn)
        {
            $nav[] = array(
                'order' => 4,
                'label' => 'My Refresh',
                'uri' => '#',
                'pages' => array(
                    array(
                        'label' => 'Accelerate My Refresh',
                        'order' => 1,
                        'controller' => 'accelerate',
                        'action' => 'index'
                    )
                )
            );

            $standardSystems = array();
            $standardSystems[] = array(
                'label' => 'About Standard Computers'
            );
            $standardSystems[] = array(
                'label' => 'Dell Optiplex 980 MT',
                'make' => 'Dell',
                'model' => 'Optiplex980MT'
            );
            $standardSystems[] = array(
                'label' => 'Dell Latitude E4310',
                'make' => 'Dell',
                'model' => 'LatitudeE4310'
            );
            $standardSystems[] = array(
                'label' => 'Dell Latitude E6410',
                'make' => 'Dell',
                'model' => 'LatitudeE6410'
            );
            $standardSystems[] = array(
                'label' => 'Dell Latitude E6510',
                'make' => 'Dell',
                'model' => 'LatitudeE6510'
            );
            $standardSystems[] = array(
                'label' => 'Apple iMac 21.5&quot;',
                'make' => 'Apple',
                'model' => 'iMac'
            );
            $standardSystems[] = array(
                'label' => 'Apple MacBook Pro 13&quot;',
                'make' => 'Apple',
                'model' => 'MacBookPro'
            );
            $standardSystems[] = array(
                'label' => 'Apple MacBook Air 11&quot;',
                'make' => 'Apple',
                'model' => 'MacBookAir'
            );

            foreach ($standardSystems as $key => &$value)
            {
                $value['controller'] = 'StandardSystem';
                $value['action'] = 'index';
                $value['order'] = $key;
                if (!isset($value['make']))
                    continue;
                $value['params'] = array('make' => $value['make'], 'model' => $value['model']);
                unset($value['make']);
                unset($value['model']);
            }

            $nav[] = array(
                'controller' => 'StandardSystem',
                'action' => 'index',
                'label' => 'Standard Computers',
                'order' => 5,
                'pages' => $standardSystems
            );

            $nav[] = array(
                'uri' => 'mailto:casrefresh@case.edu',
                'label' => 'Send Feedback',
                'order' => 6
            );
        }

        $nav = new Zend_Navigation(new Zend_Config($nav));
        $view->navigation($nav);
        //Done setting up navigation.

        //Register the view, and return it.
        $viewRenderer =
            Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
        $viewRenderer->setView($view);

        $view->setHelperPath(APPLICATION_PATH . '/views/helpers', 'Cas_View_Helper');
        return $view;
       }

    protected function _initFrontController()
    {
        $fc = Zend_Controller_Front::getInstance();
        $fc->setControllerDirectory(APPLICATION_PATH . '/controllers');
        $fc->registerPlugin(new Cas_Controller_DefaultViews());
        Zend_Controller_Action_HelperBroker::addPrefix('Cas_Controller_Helper');
        return $fc;
    }
}


283
3
задан 7 февраля 2011 в 06:02 Источник Поделиться
Комментарии
1 ответ

Вы правы, есть много работы здесь.

Вы, вероятно, нужно быть немного более зернистый в использовании методов _init. У вас есть навигации, управления доступом, просмотр конфигурации и регистрация плагина все завернутый в метод _initView. Попытайтесь разбить их в их собственных методов _init. Постарайтесь ограничить каждый метод _init к единой цели.

Лично я предпочитаю ограничить загрузки на "свечи зажигания" ролле , и двигаться в этом какая-то логика в Плагины ресурсов:

http://framework.zend.com/manual/en/zend.application.theory-of-operation.html#zend.application.theory-of-operation.resources

Я делю эти плагины на компоненты, которые я, вероятно, повторно использовать в других проектах, и компоненты, которые являются специфическими для проекта в стадии разработки. Я храню их в отдельном "пространстве имен" папки в библиотеке приложения.

Параметры экспортирования (около $standardSystems ) в Ини|на PHP|XML-файлы, где это возможно - это поможет вам поменять параметры в зависимости от окружающей среды применения, где требуется (т. е. разъемы базе).

Если у меня много последовательную логику в классе, я стараюсь использовать одну функцию для выполнения функций управления движением - но сохранить детали в отдельные методы. В настоящее время, я чувствую, что есть слишком много точек потенциального отказа в методе _initView которая позволит сделать отладку сложнее.

1
ответ дан 20 февраля 2011 в 10:02 Источник Поделиться