2013-03-18 1 views
1

PHP에서 폼을 빌드하는 이미 완료된 라이브러리를 사용하고 싶지 않습니다. 디자인 패턴을 사용하여 직접 작성하고 싶습니다. 디자인 패턴을 새로 추가했기 때문에 어떤 디자인 패턴이 PHP에서 동적으로 건물 양식에 적합한 지 알아야합니다. 동적으로 양식을 작성하는 데 사용할 디자인 패턴. PHP

class FormBuilder { 
    private $formName; 
    private $formAttributes; //array('ID' => ?, 'Classes' => array(?,?) ... 
    private $formStyle; //Css styling of form 
    private Label $labels; //a collection of label objects holding bunch labels 
    private Input $inputs; //a collection of input objects holding bunch inputs 

    /* constructor to initialize everything */ 


    /* GET/SET methods for each of the above private variables */ 

    .... 

    public function generateHTML() { 
     //takes above information and builds HTML and returns html 
    } 
} 

지금 내 문제는 내가 각 레이블에 대한 대상 및 각 입력에 대한 객체를 가질 필요가 있다는 것입니다 : 예를 들어

지금까지 내가 뭔가를 얻었다. Howerver 또는 다른 양식 요소에 대한 객체가 필요할 수 있습니다. 각각에 대해 클래스를 갖는 대신이 방법을 사용하는 가장 좋은 방법은 팩토리 패턴을 사용하는 것입니다.

사람이 라벨/입력에 사용할 FormBuilder와 패턴 디자인 패턴을 제안 할 수 또는 레이블 또는 입력 또는 텍스트 영역 등으로 식별하는 하나 개의 클래스 ...

+0

왜 라벨과 입력에 다른 클래스를 사용하겠습니까? 입력 객체에 "label"속성을 설정하기 만하면됩니다. 컨트롤 및 관련 레이블을 렌더링 할 때 해당 속성을 사용하기 만하면됩니다. –

+0

입력, 레이블, TextArea 및 기타 양식 요소 클래스를 하나에 결합하여 묶기 클래스가 필요 없다. 어떤 패턴을 사용해야할지 모르겠다. – GGio

+1

질문에 '빌드 양식'을 언급 했으므로. 가장 좋은 디자인 패턴은 빌더 패턴입니다. http://sourcemaking.com/design_patterns/builder/php/1#code – Bart

답변

3

사용할 수에 라벨 및 입력을 결합하는 방법 작성자 패턴.
http://sourcemaking.com/design_patterns/builder/php/1#code

다음은 매우 간단한 예입니다.

<?php 

class FormBuilder 
{ 
    private $elements = array(); 

    public function label($text) { 
     $this->elements[] = "<label>$text</label>"; 
     return $this; 
    } 

    public function input($type, $name, $value = '') { 
     $this->elements[] = "<input type=\"$type\" name=\"$name\" value=\"$value\" />"; 
     return $this; 
    } 

    public function textarea($name, $value = '') { 
     $this->elements[] = "<textarea name=\"$name\">$value</textarea>"; 
     return $this; 
    } 

    public function __toString() { 
     return join("\n", $this->elements); 
    } 
} 

$b = new FormBuilder(); 
echo $b->label('Name')->input('text', 'name')->textarea('message', 'My message...'); 

출력은

<label>Name</label> 
<input type="text" name="name" value="" /> 
<textarea name="message">My message...</textarea> 
+0

멋지게 보여 드리겠습니다. 고마워요. – GGio

0

이 좋아 보인다, 그러나 이것은 동적 양식에 도움이되지 않습니다. 동적 입력은 입력이 다른 입력 요소에 의존하거나 사용자가 동적으로 새 요소를 추가하는 것과 같습니다.

역동 성을 달성 할 수있는 모든 요소에 대해 별도의 클래스가 있어야합니다. 입력 클래스에 의해 확장되는 추상 요소 클래스가 있어야합니다. 또한 특정 입력 개체와 레이블을 보유하는 필드 클래스가 있어야합니다.

곧 코드를 전송합니다 .......

관련 문제