如何识别使用指向我的Codeigniter控制器的路由规则?

时间:2014-10-02 10:03:52

标签: php codeigniter url routing codeigniter-routing

在我的申请中 我有3个路由规则(在routes.php文件中定义),它们指向一个控制器

$route[urlencode('news')]       = "news/show-news";  
$route[urlencode('letters')]    = "news/show-news";  
$route[urlencode('papers')]     = "news/show-news"; 

所以
如果任何用户导航到任何这些URL
http://example.com/news/
http://example.com/letters/
http://example.com/papers/

目标控制器将为news/show-news

我的需要 如何识别使用指向我的Codeigniter控制器的路由规则?

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class News extends CI_Controller {
    public function show-news(){        
        // came from [news OR letters OR papers]  ??

    }   
}

3 个答案:

答案 0 :(得分:1)

你可以用这样的东西来做,但有各种方法来实现你想要的。基本上,为了给您一个启动,请查看以下代码:

在您的控制器中,您输入以下代码:

class News extends CI_Controller {
    public function show_news( $method = '' )      
    {

        switch ( $method )
        {
            // If news requested
            case 'news':
                // your code here
                echo 'news requested';
            break;

            // If letters requested
            case 'letters':
                // your code here
                echo 'letters requested';
            break;

            // If papers requested
            case 'papers':
                // your code here
                echo 'papers requested';
            break;

            // Default landing if nothing provided
            default:
                // your code here
                echo 'select one of the show method';

        }

    }   
}

routes.php中,您输入以下内容:

$route['news'] = "news/show_news/news";
$route['letters'] = "news/show_news/letters";
$route['papers'] = "news/show_news/papers";

所以你有第四个选项,如果没有提供任何内容,你可以重定向到某个页面,用户可以在default部分选择一种可用的新闻类型。

答案 1 :(得分:1)

首先感谢@aspirinemaga
他的回答是正确的 但是如果我们想要在不使用参数控制器功能的情况下那么
我们可以做到这一点

public function show-news(){

    // came from [news OR letters OR papers]  ??
    $requested_URI_segment = $this->uri->segment(1);
    $requested_URI_segment = urldecode($requested_URI_segment);

    switch ( $requested_URI_segment ){
        // If news requested
        case 'news':
            // your code here
            echo 'news requested'. '</br>';
        break;

        // If letters requested
        case 'letters':
            // your code here
            echo 'letters requested'. '</br>';
        break;

        // If papers requested
        case 'papers':
            // your code here
            echo 'papers requested'. '</br>';
        break;

        // Default landing if nothing provided
        default:
            // your code here
            echo 'select one of the show method'. '</br>';

    }

答案 2 :(得分:-2)

试试这个:

$route['news'] = "controller/method_name";
$route['letter'] = "controller/method_name";
$route['papers'] = "controller/method_name";

我之前使用CI制作的项目,并且有用于学生的部分&amp;缺席。所以在我的路线中我设置如下:

$route['student/page'] = "student/index";
$route['student/page/(:num)'] = "student/index/$1";
$route['absent/page'] = "absent/index";
$route['absent/page/(:num)'] = "absent/index/$1";

并在htaccess上进行了一些设置。