调用CodeIgntier中不存在的Controller函数


Calling a Controller function that does not exist in CodeIgntier

如您所知,CodeIgniter使用默认的class/function/parameters URL路由。类是一个控制器,要在控制器类内部调用的函数是URL的第二部分。但是,用户可以很容易地将URL更改为他想要的任何内容,并且如果用户试图查看不存在的函数,我希望我的应用程序能够显示一条优美的错误消息。我查看了控制器的CodeIgniter文档,它似乎没有列出,或者可能我错过了。下面是我所说的一个例子。

<?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_Controllel,我不确定这是否与它有关。我认为应用程序应该重定向到404错误的默认视图,即not_found.php,但这并没有发生。

您可以使用重映射函数

您可以使用routes.php:

application/config/routes.php
$route['404_override'] = 'controller/error_function';

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

我会研究一种不同的方式来处理你的登录系统,因为它似乎扰乱了代码点火器的工作方式。如果你愿意,请向我们展示你修改后的控制器是什么样子的,我们可能会帮助你,否则你就只能靠自己了。

在我看来,这是另一个导致此错误的错误,与MY_Controller中的"消息:未定义的属性:用户::$session"有关(可能在构造函数中)。

如果你解决了这个问题,我认为404覆盖路线会起作用。