2011-09-27 2 views
0

방금 ​​MVC 프레임 워크, 특히 Codeigniter를 사용하기 시작했으며 내 코드를 유지 관리하는 데 문제가 있으며 내 기능 (컨트롤러 또는 모델)을 배치 할 위치가 있습니다. 내가 더 잘 쓸 수 아무것도Codeigniter 가입 컨트롤러 코드 검토

<?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; 

    } 

} 

있습니까 :

지금은 시스템을 표시를 구축하고 들어

와 내가 이름 signup.php와 컨트롤러가이

이 내 코드입니다 내 코드를 유지하고 읽을 수 있습니까?

* 참고 : * 사용자가 버튼을 클릭하고 아약스 호출을하면 함수 ajaxup이 사용됩니다.

감사합니다.

답변

3

나에게 아주 잘 보이는 :

이것은 좋은 기사입니다. 당신이 $this->submitRegistration()을 요구하고있다 index()에서

  • 하지만 난 당신이 $this->_submitRegistration()를 호출 싶은 생각 : 여기에 미래의 개선을위한 몇 가지 아이디어/제안한다.

  • index()ajaxup() 메서드에서 동일한 유효성 검사 규칙을 사용하고 있으므로 배열로 끌어 와서 컨트롤러의 속성으로 만들거나 설정 파일에 넣을 수 있습니다.

설명서의 경우 herehere을 참조하십시오.

$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()을 여러 컨트롤러에서 사용해야하는 경우 기본 폼 유효성 검사 라이브러리를 확장하여 배치 할 수 있습니다.

+0

제안 birderic 주셔서 감사합니다! – fxuser