0

Zend Framework の URL 書き換えで迷っています!私はそのroute.iniようなものを持っています:

routes.page.route = :slug

そして、私はそのようなブートストラップで呼び出しを持っています:

protected function _initRoutes() {

    $uri = explode('/', $_SERVER['REQUEST_URI']);

    if (!in_array('admin', $uri)) {
        //$front = Zend_Controller_Front::getInstance();

        $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini');
        $router = $front->getRouter();
        $router->addConfig($config, 'routes');

        $front->registerPlugin(new Rez_Controller_Plugin_Routing(), 2);
    }
}

プラグインは次のようなものです:

class Rez_Controller_Plugin_Routing extends Zend_Controller_Plugin_Abstract {

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
{
    $item_db = new Application_Model_DbTable_Item();

    if(NULL != $request->getParam("slug")){

        if("admin" == $request->getParam("slug")){

            $request->setModuleName('admin');
            $request->setControllerName("index");
            $request->setActionName('index');

        }

        $page = $item_db->getPage($request->getParam("slug"));

        if(FALSE == $page){

            $request->setModuleName('default');
            $request->setControllerName($request->getParam("slug"));
            $request->setActionName('index');

            return;

        }else{

           if(NULL !== $request->getParam("language")){
             $page["lang"] = $request->getParam("language");
           }

            $request->setModuleName('default');
            $request->setControllerName("index");
            $request->setActionName('page');
            $request->setParams($page);

            return;

        }

    }
}

"htttp://mywebsite.com/en/a-simple-page"問題は、ブラウザの言語が英語の場合、またはユーザーが英語のフラグをクリックした場合にのみ、URL に言語プレフィックスを追加する必要があることです。それ以外の場合、URL は のようにする必要があります"http://mywebsite.com/a-simple-page"

これを route.ini に追加しようとしました:

routes.page.route = :language/:slug
routes.page.reqs.language = "^(en|nl)$"
routes.page.defaults.language = "nl"

しかし、試し"http://mywebsite.com/a-simple-page"てみると、作業中には機能せず"http://mywebsite.com/en/a-simple-page"、プラグインでパラメーターを取得できます。URLに言語コードが含まれていない場合でも、すべてのURLを受け入れるようにする方法は?

4

1 に答える 1

0

これを機能させるには、2 つのルートを連鎖させる必要があります。

resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module
resources.router.routes.defaultmodule.abstract = On    
resources.router.routes.defaultmodule.defaults.module = "default"

resources.router.routes.locale.type = Zend_Controller_Router_Route
resources.router.routes.locale.route = ":locale"
resources.router.routes.locale.reqs.locale = "^(en)$"
resources.router.routes.locale.defaults.locale = "nl"

resources.router.routes.default.type = Zend_Controller_Router_Route_Chain
resources.router.routes.default.chain = "locale,defaultmodule"

2 つの URL で同じコンテンツを使用することは、SEO の影響により良くないことに注意してください。リダイレクトの方が適切です。

于 2013-06-19T15:43:31.243 に答える