调用CodeIgniter中不存在的Controller函数

时间:2012-02-07 19:41:07

标签: php codeigniter

如您所知,CodeIgniter使用class/function/parameters的默认URL路由。该类是一个控制器,在控制器类中调用的函数是URL的第二部分。但是,用户可以轻松地将URL更改为他想要的任何内容,并且我希望我的应用程序能够在用户尝试查看不存在的函数时显示正常的错误消息。我浏览了CodeIgniter documentation on controllers并且它似乎没有在那里列出,或者我可能错过了它。以下是我所谈论的一个例子。

<?php

class Users extends MY_Controller {

    function index(){ //do something }

    function something_else(){ //do something else }

}

我的应用程序写得干净利落,因此除了这两个功能之外,我的应用程序中永远不会有任何链接。但是,用户可以轻松地将URL更改为他想要的任何内容,例如http://www.mysite.com/welcome/another_thing。我没有function another_thing,所以如果用户将URL更改为类似的内容,PHP当前会产生以下错误消息。

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Users::$session

Filename: core/MY_Controller.php

Line Number: 15

Fatal error: Call to a member function userdata() on a non-object in /home/diftx/public_html/dol/application/core/MY_Controller.php on line 15

我目前正在扩展MY_Controller而不是CI_Controller,我不确定它是否与它有任何关系。我认为应用程序应该重定向到我的默认视图404错误,not_found.php然而这不会发生。

4 个答案:

答案 0 :(得分:1)

您可以使用Remapping Function

答案 1 :(得分:0)

您可以使用routes.php:

application/config/routes.php

$route['404_override'] = 'controller/error_function';

答案 2 :(得分:0)

从错误看起来,您已将会话功能添加到自定义控制器并且错误地引用它。解决这个问题很可能会解决你的问题。

我会以不同的方式处理您的登录系统,因为它似乎搞乱了codeigniter工作的方式。如果你愿意,告诉我们你修改过的控制器是什么样的,我们可以帮助你,否则你几乎就是你自己。

答案 3 :(得分:0)

在我看来,还有另一个导致此问题的错误,与MY_Controller中的“Message:Undefined property:Users :: $ session”相关(可能在构造函数中)。

如果你修复了这个问题,我认为404覆盖路由会起作用。