Zend cookie проблема - PullRequest
       16

Zend cookie проблема

1 голос
/ 13 октября 2011

Я работаю над веб-приложением Zend 1.11. Я построил плагин выбора языка для переключения языка (it & en) в зависимости от ввода пользователя.

Вот что у меня есть:

class LS_Controller_Plugin_LangSelector extends Zend_Controller_Plugin_Abstract
{

public function preDispatch(Zend_Controller_Request_Abstract $request)
{


    if($request->getParam('lang'))
    {
        $lang=$request->getParam('lang');
        setcookie('lang', $lang, time() + (3600));
        echo "we just set a cookie";    
    }
    else if (isset($_COOKIE['lang']))
    {
        $lang=$_COOKIE['lang']; 
        echo $lang;
    }
    else 
    {   echo 'We are here.But I can't understand why';
        $lang='en';
        var_dump($_COOKIE);
    }

    switch(strtolower($lang))
    {
        case 'en':
            $locale="en_US";
        break;

        case 'it':
            $locale="it_IT";
        break;

        default:
            $locale="en_US";
    }

    $zl=new Zend_Locale();
    $zl->setLocale($locale);

    Zend_Registry::set('Zend_Locale',$zl);



    $translate=new Zend_Translate(
                  array(
                          'adapter' => 'gettext',
                          'content' => APPLICATION_PATH.'/configs/languages/'.$locale.'.mo',
                          'locale'  => 'en'
                      )

    );

    Zend_Registry::set('Zend_Translate',$translate);
}   

}

[bootstrap.php]

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

protected function _initRoutes()
{

    $frontController=Zend_Controller_Front::getInstance();
    $router=$frontController->getRouter();  
    $router->removeDefaultRoutes();
    $router->setGlobalParam('lang','en');
    $router->addRoute(
            'lang',
            new Zend_Controller_Router_Route('/:lang/:controller/:action',
            array('lang'=>':lang',
            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'

            )

            )
    );


    $router->addRoute(
    'langController',
    new Zend_Controller_Router_Route('/:controller/:action',
    array(
            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'
            )

    )
);

            $router->addRoute(
    'langIndex',
    new Zend_Controller_Router_Route('/:lang',
    array('lang'=>':lang',
            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'
            )

    )
);

            $router->addRoute(
    'langNothing',
    new Zend_Controller_Router_Route('',
    array('lang'=>'en',
            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'
            )

    )
);

}
}

Дело в том, что:

  • Я набираю в своем браузере полный URL-адрес mysite.com/it/index/index, и я получаю эхо "мы просто установили cookie" .. что хорошо, я должен иметь возможность просматривать свой веб-сайт с набором итальянских файлов cookie но я не Всякий раз, когда я нажимаю на ссылку (например, /index/contactus..links не указывает параметр 'lang'!), Я перехожу на эту страницу, но она снова на английском (я получаю сообщение: «мы здесь. Я не могу понять, почему ").

Разве печенье не должно быть установлено?

1 Ответ

2 голосов
/ 13 октября 2011

Проблема в том, что вы не указываете путь для своего файла cookie.Таким образом, он будет установлен только для текущей страницы .

Если вы переходите на другой (под) сайт, то ваш файл cookie недействителен по этому пути и не будет передан.Вам следует установить для вашего lang-cookie путь "/".

См. setcookie () документация:

Путь на сервере, на котором этот файл cookieбудет доступно на.Если установлено значение «/», файл cookie будет доступен во всем домене.Если установлено значение «/ foo /», файл cookie будет доступен только в каталоге / foo / и во всех его подкаталогах, таких как / foo / bar / домена. Значением по умолчанию является текущий каталог , в который устанавливается cookie.

...