2014-03-29 4 views
1

PHP로 OOP를 머리에 감싸고 있고 꽤 잘 잡히지 만,이 코드는 내가 옳다고 생각하지 않습니다. 나에게 도움이 필요해. 대부분의 코드는 로그인 시스템 구축에 대한 자습서에 있습니다. 이 자습서에서 제공되는 코드는 HTML 페이지의 맨 위에 오류를 표시합니다. 오류가 발생하는 양식 필드 옆에 오류를 표시하는 것이 더 사용자 친화적 인 것으로 생각하여 작동하는 추가 코드를 작성했지만 무거워 보입니다. 그것을 밝게하는 방법에 대한 몇 가지 제안을하고 싶습니다. 클래스의 이름은 유효성 검사이며 메서드는 등록 양식에서 호출됩니다. 전체 수업을 게시해야할지 모르겠으므로 함께 작업하는 섹션을 게시 할 예정입니다. 다음은 오류 배열을 만드는 메서드입니다.다차원 배열을 만들지 않고이 코드를 키 값으로 가져 오는 방법

private function addError($error) 
{ 
    $this->_errors[] = $error; 
} 

public function errors() 
{ 
    return $this->_errors; 
} 

다음은 페이지 맨 위에 오류를 표시하는 배열을 채우는 오류 코드의 한 줄입니다. 이 블록 내에서 addError() 메서드 호출 내의 $item은 오류를 생성 한 필드 이름입니다. 여기

if($rule === 'required' && empty($value)) 
{ 
    $this->addError("$item field is required."));     
} 

내가 코드를 변경하는 방법 그래서 나는 $item 값이 배열의 장소로 얻을 수있다. 그러나 이것은 mutlidimensional 배열을 만들어서 여러 레이어를 반복하여 $item 키로 이동해야합니다.

if($rule === 'required' && empty($value)) 
{ 
    $this->addError(array($item=>"This field is required.")); //item is going to equal field name you can change this in the registration file 
} 

여기는 배열을 반복하는 방법이며 내가 좋아하지 않는 방법입니다.

public function frm_errors($item) 
{ 
    $errors = array($this->errors()); 

    foreach($errors as $error => $error_value) 
    { 
     foreach($error_value as $field_error => $field_error_values) 
     { 
      foreach($field_error_values as $field_error_value => $value) 
      { 
       if(array_key_exists($item, $field_error_values)) 
       { 
        echo $value; 
       } 
      } 
     }    
    } 
} 

다음은 등록 양식의 메소드 호출입니다.

<input type="text" name="username" id="username" value="<?php echo Input::get('username'); ?>" autocomplete="off"><br /> 
<?php echo "<p class='error'>" . $validation->frm_errors('username') . "</p>"; ?> 

어떤 도움을 주시면 감사하겠습니다.

다음은 필드 이름이 추가 된 배열입니다.

Array 
(
    [0] => Array 
     (
      [username] => This field is required. 
     ) 

    [1] => Array 
     (
      [email] => This field is required. 
     ) 

    [2] => Array 
     (
      [password] => This field is required. 
     ) 

    [3] => Array 
     (
      [pwrd_again] => This field is required. 
     ) 

    [4] => Array 
     (
      [name] => This field is required. 
     ) 

) 

그리고 여기가 내가 매개 변수 $ 항목이 오류가있을 수 있습니다 필드의 이름이라고 가정와 같은 addError 방법으로 호출

Array 
(
    [0] => username must contain at least 5 characters's. 
    [1] => This field is required. 
    [2] => This field is required. 
    [3] => This field is required. 
    [4] => This field is required. 
) 
+1

당신이'원하는 $ item' 키로서 사용되는 경우, 단지'통과 $ item' 및 addError''에 _two_ 매개 변수로 메시지, 거기에'$ this -> _ errors [$ item] = $ message; '를 사용하십시오. (항목에 대해 둘 이상있을 수있는 경우 항목에 대한 모든 이전 오류 메시지를 덮어 씁니다.) – CBroe

+0

예 하나 이상의 오류가있을 수 있습니다. 일부 $ 항목은 고유하며 최소값/최대 값을가집니다. – Traveltech

+1

그럼'$ this -> _ errors [$ item]'을 새로운 메시지를 추가하는 배열로 만드십시오. 그러면 나중에 각 항목에 대한 메시지를 반복 할 수 있습니다. – CBroe

답변

0

을 $ 항목을 캡처하지 않고 모습입니다 메시지.

var_dump ($ this-> errors()); 배열이 실제로 어떻게 보이는지 볼 수 있습니다. 그런 다음 필수 필드 값에 액세스하는 방법을 볼 수 있습니다.

귀하가 요청한 내용. -/

나는 어색하지 않습니다. 나는 이제 막 프로그래밍에 익숙해 져 있다는 것을 깨달았습니다. 재미있는 사실을 발견하고, 실제로 원했던 것은 - 원래 루틴을 대체 한 것입니다. 너무 단순 해 보이는 것은 당신이했던 일 때문입니다! 배열 등을 보여주는 당신의 작업은 많은 도움이됩니다.가장 단순한 형태에서

public function frm_errors($item) 
    { 
     // $errorsFound = false; 
     $errors = $this->errors(); // this is already an array. 

     foreach($errors as $value) 
     { 
      if (key($value) == $item) { 
      // $errorsFound = true; 
      // echo key($value);  // fieldname 
      echo current($value); // error message 
      } 
     } 
     // return $errorsFound; 
    } 

:

public function frm_errors($item) 
    { 
     foreach($this->errors() as $value) // $value is an array of: $fieldName => $message 
     { 
      if (key($value) == $item) { // required field? 
      echo current($value);  // error message 
      } 
     } 
    } 
+0

원본 게시물을 두 출력의 배열 구조로 편집했습니다. – Traveltech

+0

테스트 코드가 제공됩니다. –

+0

이 코드가 어리 석고 순진하게 들리 겠지만이 코드는 추상적 인 클래스에 들어 있습니다. 따라서 여기에 필드 이름을 직접 입력하면이 클래스를 다른 형식으로 사용할 수 없습니다. 그게 맞지 않아? – Traveltech

관련 문제