Добавление префикса к каждому URL в CakePHP

На полусвязанной ноте, если Вы хотите запустить процесс, который имеет больше полномочий, чем Ваш текущий процесс (говорят, запуская приложение администрирования, которое требует прав Администратора из главного приложения, работающего как обычный пользователь), Вы не можете сделать настолько использующего CreateProcess () на Vista, так как это не инициирует диалоговое окно контроля учётных записей (предположение, что это включено). Диалоговое окно контроля учётных записей инициировано при использовании ShellExecute (), все же.

20
задан deceze 26 November 2009 в 04:01
поделиться

2 ответа

rchavik из IRC предложил эту ссылку: Переключение языка на основе URL-адреса CakePHP для интернационализации и локализации i18n и l10n

В общем, кажется, что переопределение Helper :: url может быть решением.

5
ответ дан 30 November 2019 в 01:13
поделиться

По сути, это весь код, который я реализовал для решения этой проблемы в конце (по крайней мере, я думаю, что это все; -)):

/config/bootstrap.php

define('DEFAULT_LANGUAGE', 'jpn');

if (!function_exists('router_url_language')) {
    function router_url_language($url) {
        if ($lang = Configure::read('Config.language')) {
            if (is_array($url)) {
                if (!isset($url['language'])) {
                    $url['language'] = $lang;
                }
                if ($url['language'] == DEFAULT_LANGUAGE) {
                    unset($url['language']);
                }
            } else if ($url == '/' && $lang !== DEFAULT_LANGUAGE) {
                $url.= $lang;
            }
        }

        return $url;
    }
}

/ config / core.php

Configure::write('Config.language', 'jpn');

/app_helper.php

class AppHelper extends Helper {

    public function url($url = null, $full = false) {
        return parent::url(router_url_language($url), $full);
    }

}

/app_controller.php

class AppController extends Controller {

    public function beforeFilter() {
        if (isset($this->params['language'])) {
            Configure::write('Config.language', $this->params['language']);
        }
    }

    public function redirect($url, $status = null, $exit = true) {
        parent::redirect(router_url_language($url), $status, $exit);
    }

    public function flash($message, $url, $pause = 1) {
        parent::flash($message, router_url_language($url), $pause);
    }

}

/config/routes.php

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/:language/', array('controller' => 'pages', 'action' => 'display', 'home'), array('language' => '[a-z]{3}'));
Router::connect('/:language/pages/*', array('controller' => 'pages', 'action' => 'display'), array('language' => '[a-z]{3}'));
Router::connect('/:language/:controller/:action/*', array(), array('language' => '[a-z]{3}'));

Это позволяет URL-адресам по умолчанию, например / controller / action , использовать значение по умолчанию язык (в моем случае - JPN) и URL-адреса типа / eng / controller / action для использования альтернативного языка. Эту логику можно довольно легко изменить в функции router_url_language () .

Чтобы это работало, мне также нужно определить два маршрута для каждого маршрута, один из которых содержит /: language / ] параметр и один без. По крайней мере, я не мог придумать, как это сделать по-другому.

14
ответ дан 30 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: