0

ログインフォーム
の問題は、私にとって新しいものであるため、codeigniter のセグメントでスタックしています。

私は動作中のURLを次のようaction="blog/login/getLog"に指定し
、ログインフォームは次のようにURLに表示されますblog/login

コントローラークラスでは、名前のような関数を作成するだけであることは知っていloginますが、コントローラーファイルを次のように作成しました。

class Blog extends CI_Controller{
function __construct(){
    parent::__construct();
}

// Now See
function _remap( $method ){
    $this->load->view('header');

    switch( $method ){
        case 'about':
            $this->load->view('about');
            break;
        case 'login':
            $this->load->view('login');
            break;
        case 'services':
            $this->load->view('service');
            break;
    }

    $this->load->view('footer');
}
}//Close Class

loginしかし、とのようなセグメントの両方を処理する方法がわかりませんlogin/getLog

EDIT:ログインボタンをクリックすると、ログインフォームが表示され_remap()、URLが次のようになります。フォームblog/loginを送信するとblog/login/getLog、ログインフォームはまだ見えますが、成功..またはgetLog可能であればセグメントを検出したいcase 'login':

ありがとうございます。

4

2 に答える 2

1

URL 経由で送信する場合は、uri クラスを使用します。

$var = $this->uri->segment(3);

フォームで送信する場合は、フォームから変数を送信します。もしかして隠しフィールド?

$var = $this->input->post('var_name');

編集:別の関数へのルーティングなしでこれに _remap を使用している理由がよくわかりません(代わりにビューファイルを呼び出そうとしているだけです)

これは、ログインフォームが表示されることを期待する方法です。

<?php echo form_open('blog/login');?>
<input type="hidden" name="getLog" value"true" />
<input type="submit" value="Login" />
</form>

次に、ブログクラスに関数を配置します

public function login() {
    if($this->input->post('getLog') === "true") {
        //the form was submitted, let's check the login?
    }
    else {
        //probably don't need an else, but form isn't submitted
    }
}

編集2:

混乱があり、実際にリマップを使用したい場合。このようにして、変数も取得できます。

function _remap( $method ) {
  if ($method == ‘something’) {
     $this->something();
  } 
  else {
      $this->somethingelse();
  }
}

function something() {
  $var1 = $this->uri->segment(3);
  $var2 = $this->input->post('some_variable_name');
}
于 2012-05-17T09:13:43.203 に答える
0
class Blog extends CI_Controller{
function __construct(){
    parent::__construct();
}

// Now See
function _remap( $method ){


    switch( $method ){
        case 'about':
            $this->about(); <---------- here method (Add header, content, footer inside respective functions)
            break;
        case 'login':
            $this->login(); <------- here too
            break;
        case 'services':
            $this->service(); <----- here too
            break;
    }


}
}//Close Class

ここで行ったことは、_remap関数ごとに URI のデフォルトの動作をオーバーライドしたことです。

オーバーライドされた関数呼び出し (通常は URI の 2 番目のセグメント) は、パラメーターとして _remap() 関数に渡されます。

簡単に言えば、ほとんどの場合、2 番目のセグメントは_remap関数内の $method になります。

あなたのフォームアクションは次のようになります。

action = "<?php echo base_url('blog/login');?>"

index.phphtaccess で URL から index.php を削除していない場合は追加してください。


編集:

ご質問の通り、

しかし、 login や login/getLog などの両方のセグメントを処理する方法がわかりません。

これがあなたの対処方法です。

メソッド名の後の余分なセグメントは、オプションの 2 番目のパラメーターとして _remap() に渡されます。

public function _remap($method, $params = array())
{
   // all other segments will be in $paramas array
}
于 2012-05-17T09:28:55.073 に答える