Zend Framework Rota Tanımlar kısaltın

3 Cevap php

Nasıl Zend Framework benim özel yollarının tanımını kısaltabilir? Şu anda tanım olarak bu var:

$route = new Zend_Controller_Router_Route(
	":module/:id",
	array(
		"controller" => "index",
		"action" => "index"	
	),
	array("id" => "\d+")
);
self::$frontController->getRouter()->addRoute('shortcutOne', $route);

$route = new Zend_Controller_Router_Route(
	":module/:controller/:id",
	array("action" => "index"),
	array("id" => "\d+")
);
self::$frontController->getRouter()->addRoute('shortcutTwo', $route);

$route = new Zend_Controller_Router_Route(
	":module/:controller/:action/:id",
	null,
	array("id" => "\d+")
);
self::$frontController->getRouter()->addRoute('shortcutThree', $route);

Is there a way to better combine these rules? And what are your best practices in where to place these? I currently have them in my bootstrap class right after the Front Controller initialization.

3 Cevap

Bu gibi yolları kurma gelince, ben bir yapılandırma dosyasını kullanın. Bir tercih olarak, ben ancak bu kadar kolay desteklenen başka bir biçimde saklanabilir, benim yapılandırma veri depolamak için XML kullanabilirsiniz. Sonra benim bootstrap olarak yönlendirici, yapılandırma gelen yolları ekleyin.

Config:

<config>
    <routes>
        <shortcutone  type="Zend_Controller_Router_Route">
            <route>:module/:id</route>
            <defaults>
                <controller>index</controller>
                <action>index</action>
            </defaults>
            <reqs id="\d+">
        </shortcutone>
        <shortcuttwo  type="Zend_Controller_Router_Route">
            <route>:module/:controller/:id</route>
            <defaults>
                <controller>index</controller>
            </defaults>
            <reqs id="\d+">
        </shortcuttwo>
        <shortcutthree  type="Zend_Controller_Router_Route">
            <route>:module/:controller/:action/:id</route>
            <defaults>
                <controller>index</controller>
                <action>index</action>
            </defaults>
            <reqs id="\d+">
        </shortcutthree>
    </routes>
</config>

Bootstrap

$config = new Zend_Config_Xml('config.xml');
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addConfig($config, 'routes');

Açıkçası, başka seçenekler vardır ve ben documentation bu konuda okumanızı öneririm, ancak, bu örnek için uygun.

Benim routes.ini dosya gerçekten büyük almaya başladı, bu yüzden onlar ayrıştırıldıktan sonra yolları önbelleğe Zend önbellekleme kullanmaya karar verdi. Ben arka uç önbelleğe alma çözümü için XCache kullanılır. İşte bootstrap.php dosyasına konulmalıdır kodu bulunuyor:

protected function _initRoutes()
{
  $backendType = 'Xcache';
  $backendOptions = array();

  // Instantiate a caching object for caching the routes
  $cache = Zend_Cache::factory('File', $backendType, 
    array(
      'automatic_serialization' => true, 
      'master_files'=>array(APPLICATION_PATH . '/configs/routes.ini')
    ), 
    $backendOptions
  );

  $frontController = Zend_Controller_Front::getInstance();        

  if(! $router = $cache->load('router')) {

    // Load up .ini file and put the results in the cache
    $routes = new Zend_Config_Ini (APPLICATION_PATH . '/configs/routes.ini', 'production');            
    $router = $frontController->getRouter();
    $router->addConfig( $routes, 'routes' );

    $cache->save($router, 'router');
  }     
  else {        
    // Use cached version
    $frontController->setRouter($router);
  }

}

Ben * kullanmayı tercih. Ini dosyaları XMLs üzerinde daha Zend-gibi beri Zend kullanarak ve çok daha hafif ve kompakt özellikle. İşte Zend_Config_Ini() kullanarak hemen hemen benzer bir konfigürasyon.

application.ini

[routes]
routes.shortcutone.route=:module/:id
routes.shortcutone.defaults.controller=index
routes.shortcutone.defaults.action=index
routes.shortcutone.reqs=\d+

bootstrap.php

$config = new Zend_Config_Ini('application.ini', 'routes');
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addConfig($config, 'routes');

application.ini dosyasındaki [routes] bölümü adını olabilir dikkat edin. Yeniden adlandırılabilir zaman Ve, ikinci parametre Zend_Config_Ini() Yeni bölüm başlığı yansıtmalıdır.