【问题标题】:Codeigniter HMVC and ion_auth with ajaxFormCodeigniter HMVC 和 ion_auth 与 ajaxForm
【发布时间】:2013-06-08 11:03:51
【问题描述】:

我正在使用 Codeigniter 2.1.3 开发一个网站

我正在使用 HMVC 创建 ion_auth 模块。

我正在尝试分离我的前端和后端登录系统。

我为 ion_auth 创建了两个模块: application/modules/auth - 用于前端 应用程序/模块/管理员 - 用于后端

两者都有相同的文件,除了管理员身份验证控制器调用不同的登录视图。

我的主页视图这样调用登录视图:

echo Module::run('auth/login');

两个身份验证控制器都扩展了 Frontend_controller,后者扩展了 MY_Controller。 MY_Controller 在应用程序/核心中,它扩展了 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;

我在应用程序/库中创建了一个 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提交表单

请问有人可以帮忙吗?

为了让这个登录系统正常工作,我已经苦苦挣扎了好几天。

【问题讨论】:

  • 貌似问题是登录表单没有通过jQuery ajaxForm调用提交,但是不知道为什么。

标签: jquery codeigniter ajaxform


【解决方案1】:

当我第一次发现 HMVC 扩展时,我是从使用 Modules::run() 开始的,然后遇到了与您类似的问题,因此我必须找出一种替代方法来做事,同时利用 CI 原生特性和HMVC。我的结论是制作一个 Frontend_Controller 和一个 Backend_controller,它们都继承自 Base_controller。后者具有模板渲染层和其他常用功能。

我组织模块的方式是使用路由文件。

您可以在 Base_controller 上添加一个身份验证检查(会话),将重定向到身份验证模块,并在那里创建一个基于会话的身份验证系统,重定向到主模块。

这个想法是每个模块将单独行动,同时仍然通过继承集成到系统中。

编辑:

我检查了您的问题并阅读了您提供的代码并发现了 2 个问题。

1- 如果你在 /system/libraries/Form_Validation.php 浏览 Form_Validation 类的源代码,你会注意到 $CI 字段是受保护的,因此不能这样设置,你可以这样做:

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 请求的正常提交行为。

【讨论】:

  • 谢谢 AchrafSoltani,但我不明白如何使用您的方式以及它如何解决我的问题。我确实有 2 个控制器前端和管理员。我还有一个基本控制器:MY_Controller。没看到怎么解决登录视图不使用jQuery ajaxForm提交表单的问题?
  • 我找到了!!!是表单声明错误:echo form_open(site_url('auth/login', $attr); 应该是:echo form_open(site_url('auth/login'), $attr);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
相关资源
最近更新 更多