簡體   English   中英

Codeigniter 2控制器掉線到另一個控制器

[英]Codeigniter 2 Controller Fall Through to a different controller

我有一個正在處理的網站,其網址結構如下:

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 ,然后正常使用pages控制器。

出於SEO的原因,我無法更改URL結構,它必須保留example.com/category-name並且他們希望它共享相同的URL結構example.com/page-name因為它更短(我試圖說服他們做類似example.com/page/page-name

new_controller/load/$1然后我該如何稱pages/view/$1

在此先謝謝你,這真的可以節省我的工作量哈哈

在您的route config您可以使用以下配置。 new_controller控制器處理所有頁面請求,只要它們的uri不包含pages控制器處理的pages/view/.*

$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.
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM