2013-06-12 51 views
0

我開發一個網站使用CodeIgniter 2.1.3笨HMVC和ion_auth與給ajaxForm

我使用HMVC創建ion_auth模塊。

我想分開我的前端和後端登錄系統。

我創建ion_auth兩個模塊: 應用/模塊/ AUTH - 爲對前端 應用/模塊/管理 - 針對後端

兩者有相同的文件,除了管理員AUTH控制器被調用不同登錄視圖。

我的主頁視圖調用這樣登錄視圖:

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

兩個AUTH控制器延伸Frontend_controller延伸MY_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> 

我有幾個問題:

問題之一:i。通過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; 
} 

這樣做,當我去到我的主頁後,我得到這個錯誤: 無法訪問受保護的財產CI_Form_validation :: $ CI在C:\網站\ TL \程序\核心\上線MY_Controller.php 12

問題二:如果我不做這些表單驗證更改並嘗試在主頁上提交登錄表單,它會在新頁面中再次打開登錄視圖,而不會出現錯誤。它看起來像它不使用jquery提交表格

請問,有人可以幫助嗎?

我現在正努力工作好幾天才能擁有此登錄系統。

+0

它看起來像問題是登錄表單不通過jQuery ajaxForm調用提交,但我不知道爲什麼。 –

回答

0

當我第一次發現HMVC擴展時,我開始使用Modules :: run(),然後遇到類似於你的問題,所以我不得不找出另一種方法來在利用兩個CI原生特性和HMVC。我的結論是製作一個從Base_controller繼承的Frontend_Controller和Backend_controller。後者具有模板渲染層和其他常用功能。

我組織我的模塊的方式是通過播放路由文件。

您可以在Base_controller上添加一個auth檢查(會話),該auth檢查會重定向到auth模塊,並且您將創建一個基於會話的身份驗證系統,重定向到主模塊。

這個想法是,每個模塊將單獨行動,同時仍然通過繼承而集成到系統中。

編輯:

我檢查了你的問題,你閱讀和提供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請求發送表單數據和檢索響應。

+0

謝謝AchrafSoltani,但我不明白如何使用你的方式,它是如何解決我的問題。 我有2個控制器前端和管理員。我也有一個基本的控制器:MY_Controller。我不明白它是如何解決登錄視圖不使用jQuery ajaxForm提交表單的問題? –

+0

我發現了! 這是形式的聲明中的錯誤: \t回聲form_open(SITE_URL( 'auth /中登錄',$ attr)使用; 應該是: 回聲form_open(SITE_URL( 'auth /中登錄'),$ attr)使用; –

+0

我已更新回覆,也許可以幫助你。 – AchrafSoltani