2011-10-25 5 views
0

私はコントローラの中に2つのメソッドがあり、1つはサインアップページの生成を担当し、もう1つはサインアップフォームの提出を担当します。CodeIgniterの2つのメソッドで変数にアクセスできるようにする方法は?

<?php 

class Signup_c extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
    } 

    function index() { 
     $data['title'] = 'Sign Up'; 

     $data['months'] = array(
      '1' => 'January', 
      '2' => 'February', 
      '3' => 'March', 
      '4' => 'April', 
      '5' => 'May', 
      '6' => 'June', 
      '7' => 'July', 
      '8' => 'August', 
      '9' => 'September', 
      '10' => 'October', 
      '11' => 'November', 
      '12' => 'December' 
     );  

     $this->load->view('signup_v', $data); 
    } 

    function submit() { 

      // validation rules here... 

     // validate 
     if ($this->form_validation->run() === FALSE) { 
      $this->load->view('www/signup_v'); 
     } 
     else { 
        // add info to database here... 

      $this->load->view('www/signup_success_v'); 
     } 

    } 

} 

ここで問題があります。検証エラーがある場合、ユーザーはサインアップページに戻り、検証エラーが表示されます。ただし、これらの変数はsubmit()メソッドではなくindex()メソッド内で定義されているため、タイトルや日付は表示されません。

これに最適な解決策は何ですか、私は自己を繰り返し、signupメソッド内の2つの変数宣言をコピーしたくありません。両方のメソッドのビューで動作させる方法はありますか?

答えて

1

なぜクラス変数を割り当てないのですか?構造の前に:あなたのメソッドの内部その後、

$title = 'Whatever'; 
$months = array('january', 'february'); 

はます$ this-> titleとの$ this - でそれらにアクセスする>ヶ月

また、なぜ戻ったばかりのあなたのindexメソッドに投稿し、それが前に後処理を行う必要はありませ他に何か?ので、あなたのインデックスメソッドは、このようなもので始まります。

if(!empty($_POST)) 
{ 
    // do some kind of validation here 
    // or call a private method in this class and set your class vars accordingly 
} 
0

あなたはsessions flashdataのようなのような、いくつかの変数にvalidation_errors();を保存することができます:

$this->session->set_flashdata('errors', validation_errors()); 

、その後、(例えば)あなたのフォームの上にそれらをエコー。それはより良い習慣だと私は思う。

BTW。あなたはこのためにセッションモジュールをロードする必要があります

+0

私が見る限り、それは彼が求めているものではありません。 – middus

0

静的配列が同じであれば(静的な場合)、データを静的配列に格納するのはどうですか?

<?php 
class Signup_c extends CI_Controller { 
    // private because no one else needs to access this 
    private static $data = array('title' => 'Sign Up', 'months' => array(...)); 

    function __construct() { 
     parent::__construct(); 
    } 

    function index() { 
     $this->load->view('signup_v', Signup_c::$data); 
    } 

    function submit() { 
     // validation rules here... 
     // validate 
     if ($this->form_validation->run() === FALSE) { 
      $this->load->view('www/signup_v', Signup_c::$data); 
     } 
     else { 
      // add info to database here... 
      $this->load->view('www/signup_success_v'); // maybe add it here, too? 
     } 
    } 
} 

また、ユーザーをインデックスにリダイレクトすることもできます。残念ながら、私はCIについてあまりよく分かりませんので、私はこれについて助言を与えるのは適切な人ではありません。

もうひとつ心に浮かぶのは、なぜあなたのコントローラに何ヶ月もの配列が必要ですか?これを行うより良い方法があると確信しています。 1つは、テンプレートでそれを持っていると考えることができます。結局何ヶ月も変わらないのか、何か見落としていますか?

関連する問題