0

Codeigniter 2.1.3 でサイトを開発しています

HMVC を使用してion_auth モジュールを作成しています。

フロントエンドとバックエンドのログイン システムを分離しようとしています。

ion_auth 用に 2 つのモジュールを作成しました: application/modules/auth - フロントエンド用 application/modules/admin - バックエンド用

管理者認証コントローラーが異なるログインビューを呼び出していることを除いて、どちらも同じファイルを持っています。

私のホームページ ビューは、次のようにログイン ビューを呼び出します。

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

どちらの認証コントローラーも、MY_Controller を拡張する Frontend_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>

いくつか問題があります:

問題 1: 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 にアクセスできません

問題 2: これらのフォーム検証の変更を行わずに、ホームページでログイン フォームを送信しようとすると、エラーなしで新しいページにログイン ビューが再び開きます。フォームの送信にjqueryを使用していないようです

お願いします、誰かがそれを手伝ってくれますか?

このログインシステムを機能させるために、私は何日も苦労しています。

4

1 に答える 1

0

Modules::run() を使用して開始した HMVC 拡張機能を初めて発見したとき、あなたと同様の問題に直面したため、CI ネイティブ機能と HMVC の両方を利用しながら別の方法を見つけなければなりませんでした。私の結論は、両方とも Base_controller から継承する Frontend_Controller と Backend_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リクエストを送信する通常の送信動作をオーバーライドする必要があると思います。

于 2013-06-12T11:16:38.107 に答える