Kohana направляет проблему на базовый URL-адрес

Я использую Кохану 3.3

Цель

Я хотел бы, чтобы мое приложение выбирало правильный файл представления на основе языка в URL-адресе. Так, например:

mydomain.com/es/foobar загрузит файл представления на испанском языке в мой контроллер Foobar. Это работает для всего, кроме базового URL. Прямо сейчас, если вы перейдете к mydomain.com/es/ или mydomain.com/en/, я получу ответ 404. Я хотел бы, чтобы он направлялся к контроллеру индекса в /classes/Controller/Index.php. Я не уверен, что мне здесь не хватает. Любые указатели будут оценены.

ЗАМЕТКА:

mydomain.com корректно переходит на страницу на английском языке.

Я могу опубликовать некоторый код контроллера, если это необходимо, но я совершенно уверен, что это просто проблема маршрутизации.

Текущие маршруты

/*I don't think this one is even getting fired even though it's first */
Route::set('mydomain_home', '(<lang>/)',
array(
    'lang' => '(en|es)'
))
->filter(function($route, $params, $request)
{   
    $lang = is_empty($params['lang']) ? 'en' : $params['lang'];
    /*This debug statement is not printing*/
    echo Debug::vars('Language in route filter: '.$lang);
    $params['controller'] = $lang.'_Index';
    return $params; // Returning an array will replace the parameters
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));;

/*This one works for the non-base URL e.g. mydomain.com/es/page1 */
Route::set('mydomain_default', '(<lang>/)(<controller>(/<action>(/<subfolder>)))',
array(
    'lang' => '(en|es)',
))
->filter(function($route, $params, $request) {
        // Replacing the hyphens for underscores.
        $params['action'] = str_replace('-', '_', $params['action']);
        return $params; // Returning an array will replace the parameters.
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));

person thatidiotguy    schedule 22.07.2013    source источник
comment
Разве вы не можете использовать сборку kohanas в модуле I18n? Использование разных файлов просмотра для разных языков было бы невозможно поддерживать. kohanaframework.org/3.3/guide-api/I18n   -  person AmazingDreams    schedule 23.07.2013
comment
Вы используете разные контроллеры для разных языков??? На вашем месте я бы серьезно задумался о чем-то другом. В контроллерах даже не должно быть никаких выходных данных, поэтому их НИКОГДА не нужно локализовать.   -  person AmazingDreams    schedule 23.07.2013
comment
@AmazingDreams Использование отдельных файлов представления ничем не отличается от использования I18N. Всякий раз, когда что-то меняется, я должен найти этот конкретный фрагмент текста и изменить его. Я также планирую, чтобы структура HTML различалась между языковыми версиями веб-сайта, так что это имеет смысл. У вас есть что добавить о моей актуальной проблеме?   -  person thatidiotguy    schedule 23.07.2013


Ответы (1)


Я воспроизвел вашу проблему и использовал ваши маршруты. После их модификации я пришел к выводу, что два маршрута будут проще. Один для обычных URL-адресов и один для языковых маршрутов.

Ниже приведены маршруты, которые я сделал:

Route::set('language_default', '(<lang>(/<controller>(/<action>(/<subfolder>))))',
array(
    'lang' => '(en|es)',
))
->filter(function($route, $params, $request) {
    // Replacing the hyphens for underscores.
    $params['action'] = str_replace('-', '_', $params['action']);
    return $params; // Returning an array will replace the parameters.
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));


Route::set('default', '(<controller>(/<action>(/<subfolder>)))')
->filter(function($route, $params, $request) {
    // Replacing the hyphens for underscores.
    $params['action'] = str_replace('-', '_', $params['action']);
    return $params; // Returning an array will replace the parameters.
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));
person Manuras    schedule 23.07.2013
comment
К сожалению, это все еще не работает, если я вставлю mydomain.com/es/. - person thatidiotguy; 23.07.2013
comment
Хм... странно, у меня работает. Также обратите внимание, что я не использовал тот же контроллер, что и вы. Я изменил это сейчас. - person Manuras; 23.07.2013
comment
Да, я это заметил. Я попробую еще раз через несколько минут, чтобы убедиться, что больше ничего странного не происходит. Спасибо! - person thatidiotguy; 23.07.2013
comment
Да, у меня была опечатка. Извините, что заставил вас сомневаться в коде. Я должен был быть более осторожным. - person thatidiotguy; 23.07.2013