Codeigniter 2.0.x - Подкаталоги контроллера по умолчанию контроллер должен быть в URL - PullRequest
1 голос
/ 16 ноября 2011

Я недавно обновил сайт с CodeIgniter 1.7.x до 2.0.3.Примерно в то же время кто-то из моей организации попросил добавить несколько страниц на сайт.Под разделом.В старой версии сайта я использовал некоторые обходные пути в контроллере, чтобы разбить более длинный URL.Но в версии 2 я вижу, что я должен иметь возможность использовать подкаталоги в папке контроллеров, чтобы сделать это более правильным способом.Посмотрев повсюду, я перепробовал все виды объявлений о маршрутизации и возился с разными вещами.Надеюсь, я делаю что-то простое, неправильное, или, возможно, кто-то видел аналогичную проблему, связанную с обновлением.

Я пытаюсь получить URL от чего-то вроде:

/about/locations

Который раньше работал с контроллером с именем about.php.К чему-то более похожему:

/about/social_responsibility/commitment

Где about теперь является aub-каталогом.

Забавно, в настоящее время он работает вроде как.Этот второй URL отображается правильно.Однако мои старые страницы, этот первый URL, теперь не работают ... Моя новая структура использует файл base.php (default_controller) в каталоге about.Таким образом, если я напишу:

/about/base/locations

Это работает.Но я подумал, что весь процесс маршрутизации (default controller) и использование подкаталогов должен очистить URL.

Моя информация выглядит следующим образом ...

Текущая маршрутизация (за последние несколько часов она изменилась)

$route['default_controller'] = "base";
$route['404_override'] = '';

$route['about'] = "about/base";

Каталоги и файлы

/controllers/about/base.php
/controllers/about/social_responsibility.php

Кусок base.php

class Base extends MY_Controller
{
public function __construct()
{
    parent::__construct();
    $this->data['parent'] = "About";

    $this->load->model('mnav');
}

public function index()
{

}

public function locations()
{

}
}

У меня также есть MY_Controller, который расширяется CI_Controller, новсе, что он делает, это включает FirePHP для меня в среде разработки.

У кого-нибудь есть подсказки?Или нужна дополнительная информация, чтобы помочь?Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

Я только что проверил на своей системе с CI 2.0.2, и кажется, что настройка контроллера по умолчанию работает и для подкаталогов, без каких-либо других маршрутов.

// so in your config file, whatever your default_controller is set to...
// you would just use that as the name of the `base` controller in about

// for example, if your default_controller is 'welcome' 
// in /application/config.php
$route['default_controller'] = "welcome";
$route['404_override'] = '';

// then, it should work for the subdirectory where there is a controller 
// named 'welcome'

//  application/controllers/about/base.php
class Welcome extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function index()
    {
        echo "I can be reached with /about";
    }
}

Итак, все, что вам нужносделать, это удалить все маршруты для about

// remove this
$route['about'] = "about/base";

Важно Это будет работать только при доступе / о - все в дополнительных сегментах будет искать дополнительные контроллеры.Поэтому вам нужно подумать о том, как вы хотели бы получить доступ к контроллеру base (независимо от того, называете ли вы его как-нибудь еще).

0 голосов
/ 17 ноября 2011

Я бы предположил, что / about / location ищет фактический контроллер "местоположений" в вашей папке about, а не метод для вашего базового контроллера.Насколько CI знает, вы пытаетесь выполнить одну из двух функций:

  1. О методе "местоположения" контроллера
  2. about / Метод индексации контроллера Locations (очевидно, не существует)

Из этого следует, что любой 3-сегментный или более URI будет работать с этой схемой, но 2-сегментные URI спутают ее.Я не думаю, что здесь может сработать отступление CI к контроллеру по умолчанию.Попробуйте это:

$route['default_controller'] = "base";
$route['404_override'] = '';

$route['([^\/]*)'] = '$1/base';
$route['([^\/]*)/([^\/]*)'] = '$1/base/$2';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...