Динамическая маршрутизация Codeigniter к одному контроллеру

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

Вот ситуация.

У нас есть клиент, у которого есть сайт с более чем 600 различными страницами. На самом деле каждая страница использует один и тот же шаблон, просто заполняя его разными данными. Мы разработали для него CMS, которая позволяет ему создавать новые страницы по желанию.

Мое идеальное решение позволило бы мне сохранить имя вновь созданной страницы в БД. Бывший. new_page_1 была создана и теперь существует в БД. Теперь, когда я набираю www.mysite.com/new_page_1, это должно перейти к контроллеру, который ищет «new_page_1» (в БД), и, если он существует, загружает представление (ЭТО ПРЕДСТАВЛЕНИЕ НЕОБХОДИМО ИСПОЛЬЗОВАТЬ ДЛЯ ВСЕХ 600 страниц), который затем берет другие данные из БД и заполняет различные разделы.

Таким образом, более 600+ страниц должны использовать один и тот же массив маршрутов и сопоставляться с одним и тем же контроллером, который затем сопоставляется с одним и тем же представлением.

Я пробовал использовать $route['(:any)'] = 'custom_controler/create/$1, а также тот же ключ массива, но с использованием main и _remap. Независимо от того, что каждый раз, когда он пытается найти имя страницы в моих представлениях (которых оно никогда не будет, потому что я использую одно общее представление для 600 страниц)

Любые идеи о том, как это сделать?

ОБНОВЛЕНИЕ route.php (это последняя строка в файле)

$route['(:any)'] = "main/create/$1";

main.php (контроллер)

class Main extends MY_Controller {

public function __construct() {
    parent::__construct();
}
public function create($page)
{
    $c = new Category();
    $c->get_by_name(ucfirst($page));
    $this->load->view('site/index',$c);
}

}

URL-адрес, который я пытаюсь использовать, - это sitename.servername.com/health, имя сайта и имя сервера явно заменены.

Ошибка, которую я получаю,

Была обнаружена ошибка

Не удалось загрузить запрошенный файл: health/main/create.php


person Zach Johnson    schedule 23.05.2013    source источник


Ответы (2)


Является ли страница ошибки, которую вы видите, шаблоном ошибки CodeIgniter или общей ошибкой сервера? Эта строка ошибки звучит очень похоже на то, что вы используете Apache или Nginx (или любой другой основной веб-сервер, который вы используете), и на самом деле она даже не разрешает ваше приложение CodeIgniter, а ищет файл PHP, которого не существует. Вам, вероятно, потребуется использовать mod_rewrite или что-то в этом роде, чтобы этот URL-адрес указывал на установку CodeIgniter.

В противном случае ваша реализация не выглядит полностью неправильной: вам, вероятно, нужно убедиться, что main.php также является маршрутом по умолчанию.

person Femi    schedule 23.05.2013
comment
Наверное, это все, я думаю, мы используем Nginx. Как я уже сказал, я не специалист по веб-бэкенду, поэтому я не слишком хорошо знаком с нашим веб-сервером или даже с codeigniter, если уж на то пошло. Завтра мне придется обсудить это с нашим ведущим веб-разработчиком и посмотреть, сможет ли он понять, почему он указывает на несуществующий файл. Спасибо за вашу помощь!. - person Zach Johnson; 23.05.2013
comment
На самом деле в файле My_Controller была строка кода, которая заставляла его использовать первый сегмент uri в качестве имени класса, я вытащил ее, и теперь она работает нормально. - person Zach Johnson; 23.05.2013

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

Использование универсального маршрута (:any) совершенно нормально. Ваш код контроллера где-то сбивает вас с толку. Обновите свой пост с кодом, если вы продолжаете бороться.

person Aken Roberts    schedule 23.05.2013