0

MVC フレームワーク、特に Codeigniter の使用を開始したばかりで、コードの保守と関数 (コントローラーまたはモデル) の配置場所に問題があります。

今のところ、サインアップシステムを構築しており、signup.phpという名前のコントローラーがあります。

これは私のコードです:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Class Signup extends CI_Controller {

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

    public function index()
    {
        $this->form_validation->set_rules('username', 'Username', 'trim|required|callback_check_valid_username|min_length[6]|max_length[20]|xss_clean');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[6]|max_length[32]');

        if ($this->form_validation->run() == false){
            $this->load->view("register/index");
        }else{
            $this->submitRegistration();
        }
    }

    public function ajaxup(){
        if ($this->input->isAjaxRequest()){
            header('Content-type: application/json');

            $error = false;
            $message = '';

            $this->form_validation->set_rules('username', 'Username', 'trim|required|callback_check_valid_username|min_length[6]|max_length[20]|xss_clean');
            $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
            $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[6]|max_length[32]');

            if ($this->form_validation->run() == false){
                $message = validation_errors();
                $error = true;
            }else{
                $this->_submitRegistration();
                $message = 'Successfully registered.';
            }

            $return = array(
                'error' => $error,
                'message' => $message
            );

            $return = json_encode($return);

            echo $return;

        }
    }

    public function _submitRegistration(){
        $username = $this->input->post('username');
        $email = $this->input->post('email');
        $password = $this->input->post('password');

        $data = array(
            'username' => $username,
            'email'    => $email,
            'password' => $password
        );

        $this->load->model('users_model');

        $this->users_model->register_user($data);
    }

    public function check_valid_username($username){

        $this->load->model('users_model');

        if (!$this->users_model->is_valid_username($username)){
            $this->form_validation->set_message('check_valid_username', 'The %s field should contain only letters, numbers or periods');
            return false;
        }

        return true;

    }

}

コードを維持して読みやすくするために、もっとうまく書けるものはありますか?

*注: * ajaxup 関数は、ユーザーがボタンをクリックして ajax 呼び出しを行うときに使用されます。

ありがとう

4

2 に答える 2

3

私にはかなり良さそうです。将来の改善のためのいくつかのアイデア/提案は次のとおりです。

  • index()あなたは電話をかけていますが、私はあなたが電話$this->submitRegistration()をかけたいと思います$this->_submitRegistration()

  • index()とメソッドの両方で同じ検証ルールを使用しているので、ajaxup()それらをプルして配列に引き出し、コントローラーのプロパティにするか、構成ファイルに入れることができます。

ドキュメントについては、ここここを参照してください。

$validation_rules = array(
    array(
        'field'   => 'username',
        'label'   => 'Username',
        'rules'   => 'trim|required|callback_check_valid_username|min_length[6]|max_length[20]|xss_clean'
    ),
    array(
        'field'   => 'email',
        'label'   => 'Email',
        'rules'   => 'trim|required|valid_email'
    ),
    array(
        'field'   => 'password',
        'label'   => 'Password',
        'rules'   => 'trim|required|min_length[6]|max_length[32]'
    ),
);

次に、メソッドで。と同様のことを行います$this->form_validation->set_rules($validation_rules)

  • 検証ルールの並べ替えを検討してください。たとえば、ユーザー名フィールドのルールを見てみましょう。(ユーザーモデルを介して)データベースを呼び出す場合check_valid_username()は、前に長さの要件を検証することをお勧めします。ユーザー名が無効であるかどうかを判断できれば、データベースに高額な呼び出しを行っても意味がありません。

  • コールバックメソッドをプライベートにします。現在check_valid_username()はパブリックメソッドであり、URLを介してアクセスできる可能性があります。アンダースコア(_check_valid_username())を前に付けてから、検証ルールで。を使用しますcallback__check_valid_username。2つのアンダースコアに注意してください。

  • 複数のコントローラーで使用する必要がある場合check_valid_username()は、ネイティブフォーム検証ライブラリを拡張してそこに配置できます。

于 2011-09-27T12:51:53.343 に答える
2

これは私にはうまく見えます。関連するすべての機能がユーザーモデルにあるようで、コントローラーを使用してそれらにアクセスしています。確信が持てない場合は、MVC 理論を読むことをお勧めします。

これは良い記事です: http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html

于 2011-09-27T12:26:23.990 に答える