我想从CodeIgniter中的URL中删除Controller和函数名称

时间:2015-01-07 05:41:03

标签: php codeigniter

我当前的网址是  http://myaliveidea.com/news/news/readmore/78/Hacker-drama-Mr.-Robot-is-granted-full-series-by-USA-Network

http://myaliveidea.com/news/ - >这是基本网址。

新闻 - >是控制器名称

readmore - >是功能名称

78 / Hacker-drama-Mr.-Robot-was-full-series-by-USA-Network - >我的博客ID和他的头衔

所以我想从url中删除控制器和函数名称  像这样

http://myaliveidea.com/news/78/Hacker-drama-Mr.-Robot-is-granted-full-series-by-USA-Network

3 个答案:

答案 0 :(得分:0)

如果您希望新闻控制器成为您的主控制器。您必须在路线中进行设置,因此当您转到http://myaliveidea.com时,它将转到新闻控制器,而不显示控制器名称。我会从您的基本网址中删除/news/,并将新闻设置为路由中的默认控制器。

$route['default_controller'] = "news"; gets index from controller

$route['default_controller'] = "news/readmore";

这里还有很好的CI教程https://www.youtube.com/watch?v=9hRNFgSLLAQ

答案 1 :(得分:0)

在Code igniter用户指南中查看路由文档。

答案 2 :(得分:0)

您还可以在控制器中使用_remap()函数。这样,如果您有动态数据,则无需担心更新routes.php

https://ellislab.com/codeigniter/user-guide/general/controllers.html#remapping

将以下代码(未经过完全测试)放入您的新闻控制器中。

/**
 * Intercept all calls to this class. 
 * 
 * @access private
 * @param string
 * @param array
 * @return boolean
 */
function _remap($method, $params)
{
    // If method exists, call that method.
    if (method_exists($this, $method) !== false) return call_user_func_array(array($this, $method), $params);

    // Method is actually a news_id and 1st parameter is title
    $sql = 'SELECT news_id FROM news WHERE news_id = ? AND title = ?';
    $news_id = $method;
    $title = (isset($params[0])) ? $params[0] : '';
    $qobj = $this->db->query($sql, array($method, $title); 

    if ($qobj->num_rows()) {
        return $this->readmore($news_id, $title);
    }

    // Non-existing method
    show_404();
}
相关问题