0

我有 CodeIgniter 2.1.3 扩展了下面的 HMVC插件,我一直跟着它到最后,让它在基本示例中没有问题地工作。但是现在我想使用 BitAuth 身份验证库扩展我的应用程序,并且我想将它作为一个模块来实现。

所以我已经根据插件的文档完成了所有步骤:
我创建了一个带有控制器和视图的文件夹 auth,它带有 BithAuth 库,并调用了模块控制器和方法,但这给了我一个 404 错误。

例如,当我打电话时,我注意到测试模块和我的 bithauth 模块之间存在一个差异

<?php Modules::run('module/controller/method'); ?>

this 在测试模块上,然后访问 localhost/home/index 页面显示主页视图并呈现模块视图。但是,当我在我的 bitauth 模块上调用它并访问时,localhost我被重定向到localhost/bithauth_controller/bitauth_method并引发 404 错误。

我的文件夹结构:

->application  
-->controllers  
-->views  
-->models  
--->modules/auth/controllers  
--->modules/auth/vews/examples  
--->modules/auth/models    

我的家庭控制器映射到家庭 url:localhost

class Home extends MX_Controller {
    public function index()
    {
        $this->load->view('home');
    }
}

及其视图文件:

<html>
    <head>
        <title>Shop: index</title>
    </head>
    <body>
        <?php Modules::run('auth/Example/index'); ?>
    </body>
</html>

现在在 auth 文件夹中,我有 bithauth 控制器:

class Example extends MX_Controller
{

    /**
     * Example::__construct()
     *
     */
    public function __construct()
    {
        parent::__construct();

        $this->load->library('bitauth');

        $this->load->helper('form');
        $this->load->helper('url');

        $this->load->library('form_validation');
        $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
    }

    public function index()
    {
        if( ! $this->bitauth->logged_in())
        {
            $this->session->set_userdata('redir', current_url());
            redirect('example/login');
        }

        $this->load->view('example/users', array('bitauth' => $this->bitauth, 'users' => $this->bitauth->get_users()));
    }


}

以及 auth/views 中的视图:一个简单的形式

<body>
    <?php

        echo '<table border="0" cellspacing="0" cellpadding="0" id="table">';
        echo '<caption>BitAuth Example: Users</caption>';
        echo '<tr><th width="1">ID</th><th>Username</th><th>Full Name</th><th>Actions</th></tr>';
        if( ! empty($users))
        {
            foreach($users as $_user)
            {
                $actions = '';
                if($bitauth->has_role('admin'))
                {
                    $actions = anchor('example/edit_user/'.$_user->user_id, 'Edit User');
                    if( ! $_user->active)
                    {
                        $actions .= '<br/>'.anchor('example/activate/'.$_user->activation_code, 'Activate User');
                    }

                }

                echo '<tr>'.
                    '<td>'.$_user->user_id.'</td>'.
                    '<td>'.$_user->username.'</td>'.
                    '<td>'.$_user->fullname.'</td>'.
                    '<td>'.$actions.'</td>'.
                '</tr>';
            }
        }
        echo '</table>';

        echo '<div id="bottom">';
        echo anchor('example/logout', 'Logout', 'style="float: right;"');
        echo anchor('example/groups', 'View Groups');
        if($bitauth->is_admin())
        {
            echo '<br/>'.anchor('example/add_user', 'Add User');
        }
        echo '</div>';

    ?>
</body>

我注意到重定向发生是由于我解决if()了方法中的语句,index()但现在我没有显示我的模块视图,也没有收到任何错误。

4

2 回答 2

2

我没有显示我的模块视图,也没有收到任何错误。

试试这个:

<?php echo Modules::run('module/controller/method'); ?>

但最好使用这种方式(Codeigniter 输出类):

<?php $this->output->append_output( Modules::run('module/controller/method') ); ?>

我希望这有帮助

于 2013-01-26T19:55:18.803 回答
0

因此,如果你们中的任何人在这里,在您的路线上使用 (GET/POST/DELETE/PUT) 时寻找解决方案REQUEST_METHOD,并面临 404 错误,这里是解决方案:显然,CodeIgniter 的 HMVC 插件忘记考虑处理不同的路由请求的类型,不像它的本机版本。实际上,当您为特定类型的请求定义路由时,它无法加载关联的模块。所以,我继续调整模块类。如果您按照上面其他人的规定维护了代码结构,则需要转到application/third_party/MX/Modules.php第 234 行并将以下内容添加到行:

            $method = $_SERVER['REQUEST_METHOD'];
            $val = is_array($val) ?(empty($val[$method]) ?'' :$val[$method]) :$val;
于 2015-11-29T22:03:50.003 回答