Проверка кода Codeigniter Регистрация контроллера - PullRequest
0 голосов
/ 27 сентября 2011

Я только начал использовать инфраструктуру 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.

Спасибо

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

выглядит довольно хорошо для меня.Вот несколько идей / предложений для будущих улучшений:

  • В 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.Обратите внимание на два подчеркивания.

  • Если вам нужно использовать check_valid_username() в нескольких контроллерах, вы можете расширить встроенную библиотеку проверки формы и поместить ее туда.

2 голосов
/ 27 сентября 2011

Это выглядит хорошо для меня. Кажется, у вас есть все соответствующие функции, расположенные в пользовательской модели, и вы используете контроллер для доступа к ним. Все, что я могу предложить, это прочитать теорию MVC, если вы не уверены.

Это хорошая статья: http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html

...