1

私のコードは次のとおりです。

//Setup days
 $data['days']['FALSE'] = 'Day';

 //Setup months
 $data['months'] = array('FALSE' => 'Month',
                 '1'  => 'Jan',
                 '2'  => 'Feb',
                 '3'  => 'Mar',
                 '4'  => 'Apr',
                 '5'  => 'May',
                 '6'  => 'Jun',
                 '7'  => 'Jul',
                 '8'  => 'Aug',
                 '9'  => 'Sep',
                 '10' => 'Oct',
                 '11' => 'Nov',
                 '12' => 'Dec'
                );


 for($i=1;$i<=31;$i++){
    $data['days'][$i] = $i;
 }

 //Setup years
 $start_year = date("Y",mktime(0,0,0,date("m"),date("d"),date("Y")-100)); //Adjust 100 to however many year back you want
 $data['years']['FALSE'] = 'Year';

 for ($i=$start_year;$i<=date("Y");++$i) {
    $data['years'][$i] = $i;
}

ここに私のifステートメントがあります:

if($this->form_validation->run()){
    $month = $this->input->post('months');
    $day = $this->input->post('days');
    $year = $this->input->post('years');

    $birthday = date("m-d-Y H:i:s",mktime(0,0,0,$month,$day,$year));
 } 

ビュー内のフォームの対応するコードは次のとおりです。

   <p>
        <label for="birthday">Birthday: </label>
        <?php echo form_dropdown('days',$days). " " . form_dropdown('months',$months). " " . form_dropdown('years',$years); ?>
    </p>

日付ピッカーコードをコントローラーに直接配置すると、フォームのドロップダウンが正しく表示されます。コーディングをきちんとしたかったので、モデルを作成することに決め、コントローラーから呼び出しを試みましたが、ビューがフォームを表示しようとすると、未定義の変数エラーが数回発生します。

私はいくつかの調査を行い、日付ピッカーをヘルパーにする方が良いかどうか疑問に思っています。

これはこれを行うための最良の方法ですか?

もしそうなら、誰かが私がこれを行う方法の例を教えてもらえますか? 別の方法があれば、誰か教えてください。

前もって感謝します..私は学ぶためにここにいます..

4

2 に答える 2

1

多くの開発者 (私を含む) が、このコードの独自のバージョンを開発しました。ここで指摘したい問題が 2 つあります。

まず第一に、あなたはここで誤った安心感に陥ってしまいました。制限された select 要素は、すべてのリクエストに有効な日付が含まれていることを保証できませんし、保証しません。入力を信頼しないでください。常に検証します。Form_validation クラスを独自の日付検証関数で拡張します。

第 2 に、ユーザーに 3 つのドロップダウンをプルさせる (すべてのリクエストで有効な日付を緩和する保証なしで) ことは、特にユーザーが複数の日付 (開始日/終了日、マイルストーンの日付など) を入力する必要がある場合に、かなりひどい UX です。

この 2 つのことを理解した後、サイトからこれをリファクタリングしました。現在、私の日付フィールドは入力タイプのテキストであり、日付の予想される形式を指定するラベルが付いています。私の Form_validation クラスは、日付フィールドを検証するように拡張されています。そして、フォームに実際の日付ピッカーを追加しました。

于 2010-09-19T15:59:40.663 に答える
0

これにはヘルパーが最適なようです。それを行うには、ドキュメントとこのSOの質問を見てください

余談ですが、複数のフレームワーク、アプリケーション、または場所で使用される可能性のある汎用コードで私が行うことは次のとおりです。

  • My_Utils.php など、完全に別の php ファイルを用意する
  • そこに静的関数でいっぱいのクラスを作成します(または> = PHP 5.3の場合は名前空間を使用します)
  • これは、関数がフレームワーク/他のコードの他の場所で定義されていないことを確認するために行います
  • CodeIgniter の初期化/ルーティングの前に、CodeIgniter の index.php にそれを含めます。
  • このようにして、コードベース (コントローラー、ビュー) 全体で利用できます。
  • 必要に応じて使用してください
  • 保守性と簡単な組み込みのために、各 Web サーバーの中央の場所に保管します。

この場合、あなたform_dropdownは単に上記のファイルの静的関数になります:

class My_Utils {

    public static function form_dropdown($param1, $param2) {

    }

}

そして、あなたはそれを使うでしょう:

echo My_Utils::form_dropdown('days',$days)
于 2010-09-18T20:37:54.123 に答える