【问题标题】:Calling a Controller function that does not exist in CodeIgntier调用 CodeIgniter 中不存在的 Controller 函数
【发布时间】:2012-02-07 19:41:06
【问题描述】:

如您所知,CodeIgniter 使用默认的 URL 路由 class/function/parameters。该类是一个控制器,在控制器类内部调用的函数是 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 但是这不会发生。

【问题讨论】:

标签: php codeigniter


【解决方案1】:

您可以使用Remapping Function

【讨论】:

    【解决方案2】:

    你可以使用routes.php:

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

    【讨论】:

    • 我在 routes.php 页面中定义了$route['404_override'] = 'welcome/not_found'。但是,它似乎没有解析到所需的页面,但我不确定为什么。我确实将 404 页面设置为视图并存储在 views/welcome/not_found.php 中。
    【解决方案3】:

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

    我会研究一种不同的方式来处理您的登录系统,因为它似乎会扰乱 codeigniter 的工作方式。如果您愿意,请向我们展示您修改后的控制器的外观,我们或许可以为您提供帮助,否则您几乎只能靠自己了。

    【讨论】:

      【解决方案4】:

      在我看来,还有另一个错误导致此问题,与 MY_Controller 中的“消息:未定义属性:Users::$session”有关(可能在构造函数中)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 2020-01-13
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多