Я создаю многоязычный веб-сайт с версией 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';
Но я знаю, что это не истинный метод. Если у вас есть предложение для этого, вы делаете меня счастливым.
Заранее спасибо!
Я решил это!
Просто удалите $route['^(tr|en)/(.+)$'] = "$2";
line на application/config/routes.php
. Все это.
$route['tr/admin/main/(:num)'] = 'back/home/$1';
чем$route['^(tr|en)/(.+)$'] = '$2';
, Обратите внимание на пешеходность маршрутов в документации.