Ошибка маршрутизации CodeIgniter i18n

1

Я создаю многоязычный веб-сайт с версией CodeIgniter 3.0 и имею некоторые ошибки на стороне маршрутизации.

Прежде всего, я использую эту библиотеку для i18n. Разумеется, я сделал небольшие изменения для версии 3.0, потому что эта библиотека для версии 2.0. Я только что сделал это изменение в файле MY_Config.php.

Оригинальный файл MY_Config.php:

class MY_Config extends CI_Config {

    function site_url($uri = '')
    {   
        if (is_array($uri))
        {
            $uri = implode('/', $uri);
        }

        if (class_exists('CI_Controller'))
        {
            $CI =& get_instance();
            $uri = $CI->lang->localized($uri);          
        }

        return parent::site_url($uri);
    }

}

Мой файл MY_Config.php:

class MY_Config extends CI_Config
{
    public function site_url($uri = '', $protocol = NULL)
    {    
        if (is_array($uri))
        {
            $uri = implode('/', $uri);
        }

        if (function_exists('get_instance'))
        {
            $uri = get_instance()->lang->localized($uri);            
        }

        return parent::site_url($uri, $protocol);
    }
} 

Моя проблема связана с (:num). Обычно все страницы маршрутизируются, за исключением (:num). Например, это работает отлично;

$route['^(tr|en)/(.+)$'] =  '$2';

$route['tr/admin/main'] =   'back/home';

Но этот не работает. Это дает 404 error.

$route['^(tr|en)/(.+)$'] =  '$2';

$route['tr/admin/main/(:num)'] =    'back/home/$1';

Я попытался изменить back/home/$1 на back/home/$3 но ничего не изменилось.

У меня также есть еще одна проблема, которую я не мог решить. Если я хочу использовать больше языков, я должен добавить в эту структуру разные переменные файла маршрутизации. Например; если я хочу использовать французский, мне нужно добавить эту строку в application/config/routes.php:

$route['fr/admin/main/(:num)'] = 'back/home/$1';

Но я знаю, что это не истинный метод. Если у вас есть предложение для этого, вы делаете меня счастливым.

Заранее спасибо!

Теги:
codeigniter
routing
internationalization

1 ответ

1

Я решил это!

Просто удалите $route['^(tr|en)/(.+)$'] = "$2"; line на application/config/routes.php. Все это.

  • 0
    Вам не нужно удалять его. Просто поменяйте местами тех. IE first $route['tr/admin/main/(:num)'] = 'back/home/$1'; чем $route['^(tr|en)/(.+)$'] = '$2'; , Обратите внимание на пешеходность маршрутов в документации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню