URL-адреса Codeigniter на нескольких языках, но обрабатываются одним контроллером - PullRequest
1 голос
/ 29 ноября 2011

Допустим, я хотел бы перечислить продукты в проекте codeigniter и поддерживать несколько языков, чтобы кто-то мог выбрать английский и получить URL example.com/products/5, где 5 - номер страницы, а кто-то другой выбрал бы итальянский и пошел бы получить example.com/prodotti/5.За кулисами я хочу иметь контроллер, которому передают языковой параметр и параметр номера страницы для обработки этих запросов.У меня есть небольшое количество ситуаций, подобных этой, и я думал о создании двух контроллеров с именами products и prodotti, а затем вызывал третий контроллер для каждого из них, задав ему необходимые параметры.

Есть лилучший способ?Это достижимо с маршрутами?

1 Ответ

0 голосов
/ 25 января 2012

Вот как я это решил:

application / config / rout.php

$route['products/(.*)'] = 'products/en/$1';
$route['prodotti/(.*)'] = 'products/it/$1';

application / controllers / products.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Products extends CI_Controller {

    public function index($lang, $nr)
    {
        echo 'lang: ', $lang, ' nr: ',$nr;
    }

    // https://gist.github.com/1096571
    function _remap($method)
    {
        $param_offset = 2;

        if ( ! method_exists($this, $method))
        {
            $param_offset = 1;
            $method = 'index';
        }

        $params = array_slice($this->uri->rsegment_array(), $param_offset);

        call_user_func_array(array($this, $method), $params);
    }
}
...