我正在使用Codeigniter 2.1.3开发一个网站
我正在使用HMVC创建ion_auth模块。
我正在尝试将我的前端和后端登录系统分开。
我为ion_auth创建了两个模块: application / modules / auth - 用于前端 application / modules / admin - 用于后端
两者都有相同的文件,但admin auth控制器正在调用不同的登录视图。
我的主页视图调用登录视图,如下所示:
echo Module::run('auth/login');
两个auth控制器都扩展了扩展MY_Controller的Frontend_controller。 MY_Controller在application / core中,它扩展了MX_Controller。
前端的登录视图是使用ajaxForm提交表单:
<div id="login_form">
<?php
$attr = array('class'=>'form-inline', 'id'=>'loginForm');
$send = array('class'=>'btn btn-inverse', 'name'=>'signin', 'value'=>'Sign In');
echo form_open(site_url('auth/login', $attr));
?>
<div >
<img src="<?php echo site_url('assets/img/login.gif'); ?>" alt="Login" />
</div>
<div left; font-size:11px; font-weight:bold;padding-top:25px;margin-right:45px">LOGIN</div>
<div left">
<?php echo form_label('Cellphone', 'cellphone', array('class'=>'login-label')); ?>
</div>
<div class="span2" padding-top:10px"><?php echo form_input('identity', set_value('identity', ''), 'placeholder="cellphone no" class="span2 phone" id="cellphone"'); ?></div>
<div left; margin-left:10px"><?php echo form_label('Password', 'password', array('class'=>'login-label')); ?></div>
<div class="span2" padding-top:10px"><?php echo form_password('password', '', 'placeholder="password" class="span2" id="password"'); ?></div>
<div class="span1" ><?php echo form_submit($send); ?></div>
<input type="hidden" name="submitLogin" value="1" />
<?php echo form_close(); ?>
<div class="clearfix"></div>
</div>
<script>
$(function()
{
var options = {
target: '#login_form',
success: showResponse // post-submit callback
};
$('#loginForm').ajaxForm(options);
// post-submit callback
function showResponse(responseText, statusText, xhr, $form) {
alert('status: ' + statusText + '\n\nresponseText: \n' + responseText +
'\n\nThe output div should have already been updated with the responseText.');
}
});
</script>
我有一些问题:
问题一:我通读了HMVC文档并将这些行添加到MY_Controller文件中:
$this->load->library('form_validation');
$this->form_validation->CI =& $this;
我在:application / libraries:
中创建了一个MY_Form_validation文件class My_Form_validation extends CI_Form_validation()
{
public $CI;
}
执行此操作后,当我转到我的主页时,我收到此错误: 无法在第12行的C:\ sites \ tl \ application \ core \ MY_Controller.php中访问受保护的属性CI_Form_validation :: $ CI
问题二:如果我不执行这些表单验证更改并尝试在主页上提交登录表单,则会在新页面中再次打开登录视图,且没有错误。看起来它没有使用jquery来提交表单
请有人帮忙吗?
我现在正在努力让这个登录系统正常工作。
答案 0 :(得分:0)
当我第一次发现HMVC扩展时,我开始使用Modules :: run(),然后遇到类似于你的问题,所以我必须找到另一种方法来做事情,同时利用CI本机功能和HMVC。我的结论是创建一个Frontend_Controller和一个Backend_controller,它们都继承自Base_controller。后者具有模板渲染层和其他常用功能。
我组织模块的方式是使用路径文件。
您可以在Base_controller上添加一个auth检查(会话),它将重定向到auth模块,然后您将创建一个基于会话的身份验证系统,重定向到主模块。
这个想法是每个模块都将单独行动,同时仍然通过继承集成到系统中。
编辑:
我已检查过您的问题并阅读了您提供的代码,并发现了2个问题。
1-如果您浏览/system/libraries/Form_Validation.php中的Form_Validation类的源代码,您会注意到$ CI字段受到保护,因此不能像这样设置,而是可以这样做:< / p>
class My_Form_validation extends CI_Form_validation()
{
function __construct()
{
parent::__construct(); // in the parent constructor : $this->CI =& get_instance();
}
}
2-您正在通过表单的id调用ajaxFrom(),我认为您应该覆盖正常的提交行为,该行为通常通过发送表单数据并检索响应的ajax调用发送标准http请求。 / p>