Codeigniter 2 контроллер провалился на другой контроллер - PullRequest
0 голосов
/ 10 мая 2018

У меня есть сайт, над которым я работаю, который имеет структуру URL, которая выглядит следующим образом:

example.com/category-name

В настоящее время это относится к контроллеру длиной в 1000 строк, называемому страницами, который был построен много лет назад и никогда не менялся.,Я вставляю новый контроллер над этим в маршрут, который выглядит следующим образом:

$route['(:any)'] = 'new_controller/load/$1
$route['default_controller'] = "pages";

Идея заключается в том, чтобы new_controller работал следующим образом:

example.com/page-name

Это выглядит page-name в базе данных и отображает некоторый текст, сделанный деловыми людьми в администраторе сайта.

Проблема заключается в том, что если page-name не найден в этой таблице, для устаревших целей я должен прорваться через new_controller/load, а затем нормально использовать контроллер страниц.

По причинам SEO яне может изменить структуру URL, она должна оставаться example.com/category-name, и они хотят, чтобы она имела ту же структуру URL example.com/page-name, потому что она короче (я пытался убедить их сделать что-то вроде example.com/page/page-name)

С new_controller/load/$1 как мне тогда позвонить, скажем pages/view/$1?

Заранее спасибо, это действительно спасет мою задницу на работе, ха-ха

1 Ответ

0 голосов
/ 11 мая 2018

В вашем route config вы можете использовать конфигурацию ниже.Контроллер new_controller обрабатывает все запросы страниц, если их URI не содержат pages/view/.*, который обрабатывает pages контроллер.

$route['pages\/view\/(.*)'] = 'pages/view/$1';
$route['(?!pages\/view)(.*)'] = 'new_controller/load/$1';

В new_controller контроллере - вы можете сделать что-то вроде приведенного ниже кода, так что еслипуля не существует в базе данных, вместо этого он будет обрабатываться pages контроллером.

public function load($slug)
{
        if(/*slug in database*/){
            echo "Slug content from database";
        }
        else { // slug not in database

            redirect(site_url('pages/view/'.$slug)); // You can use this
            echo file_get_contents(site_url('pages/view/'.$slug)); // or this
            $this->load->view('pages_template'); // or this
            // or semething else.
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...