0

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

Прошлая ситуация.

У нас есть клиент, у которого есть сайт с более чем 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 страниц)

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

UPDATE routes.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 и имя сервера явно заменены.

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

Обнаружена ошибка

Не удалось загрузить требуемый файл: здоровье/главная/create.php

ответ

1

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

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

+0

Это возможно, я считаю, что мы используем Nginx. Как я уже сказал, я не сторонник веб-сайта здесь, поэтому я не слишком хорошо знаком с нашим веб-сервером или даже с кодерингом. Мне нужно обсудить это с нашим ведущим веб-разработчиком завтра и посмотреть, сможет ли он понять, почему он указывает на файл, который не существует. Спасибо за вашу помощь!. –

+0

На самом деле в файле My_Controller была строка кода, которая заставляла его использовать первый сегмент uri в качестве имени класса, я вытащил его, и теперь он отлично работает. –

0

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

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

Смежные вопросы