1

젠드 프레임 워크에 데코레이터가 얼마나 심하게 설계되었는지 내 머리를 찢어 버리고 있습니다. 저는 간단한 프론트 엔드 작업이어야하는 무언가를하는 방법을 알아 내려고 노력하면서 오늘과 많은 다른 날을 보냈습니다.Zend_Forms 및 ZF의 데코레이터 - 하나의 컨테이너에 라벨, 입력 및 오류 표시

내 생각에 Zend_Forms 및 데코레이터는 ZF의 최악의 부분이며 백엔드 및 프론트 엔드는 적절하게 구분되지 않습니다. 양식 클래스가 HTML을 인쇄하는 방법을 지시하는 이유는 무엇입니까?

[Username  ] 
[Password  ] 
: 나는 레이블 같은 분야의 상단에 앉아 싶어서 이렇게 원하는 이유는

<div class="labeledField"> 
    <label for="username">Username</label> 
    <input type="text" id="username" name="username" /> 
</div> 
<div class="labeledField"> 
    <label for="password">Password</label> 
    <input type="password" id="password" name="password" /> 
</div> 

:

내가 찾는 모든

는 같은 simple입니다

이 방법을 사용하면 입력을 선택하면 레이블이 약간 흐려지지만 입력을 선택하면 레이블이 그대로 유지됩니다. JS를 사용하면 입력 상자에 내용이 있으면 레이블이 숨겨집니다. 이 기능은 Apple 장바구니에 있습니다.

저는 Zend_form의 유효성 검사 부분을 매우 좋아합니다. 백엔드 코드가 HTML의 모양을 지정하지 않으면 어떻게하면 프론트 엔드에 배치 될 수 있는지 알고 싶습니다.

<div class="labeledField"> 
    <?php 
    echo $this->form->username->getLabel(); 
    echo $this->form->username->getElement(); 
    $errors = $this->form->username->getErrors(); 
    if (sizeof($errors) > 0) { 
     ?> 
     <div class="errors"> 
     <?php 
     foreach($errors as $error) { 
      ?> 
      <li><?php echo $error ?></li> 
      <?php 
     } 
     ?> 
     </div> 
     <?php 
    } 
    ?> 
</div> 

그러나 다음 템플릿이 날 수있는 것 : 내 의견으로는/뷰/폴더에 액세스 할 수있는 frontender에서 (템플릿을해야 하나 또는 내가 좋아하는 뭔가를 할 수 있어야에서

그냥 $ this-> form을 echo하고 내가 원하는 필드에 위와 같은 포맷을 사용하게하십시오.

+0

그래, Zend_Form은 내가 가장 좋아하는 구성 요소입니다. 필자의 조언 : Zend_Form을 버리고 validator 클래스를 사용하여 직접 코딩 한 양식의 입력을 확인하십시오. –

답변

2

데코레이터는 익숙하지 않아도됩니다. 몇 가지 문제/

젠드 프레임 워크에 데코레이터가 얼마나 심하게 설계되었는지 내 머리를 찢어 버리는 것. 나는 오늘과 다른 며칠 동안 간단한 프론트 엔드 작업을 수행하는 방법을 알아 내려고 노력했습니다.

그래, 나는 머리카락이 전혀 남아 있지 않은 기적입니다.

내 생각에 Zend_Forms 및 데코레이터는 ZF의 최악의 부분이며 백엔드와 프론트 엔드는 올바르게 구분되어 있지 않습니다. 양식 클래스가 HTML을 인쇄하는 방법을 지시하는 이유는 무엇입니까?

여기서 양식을 렌더링하는 방법이 프리젠 테이션 문제이므로보기와 관련이 있습니다. 관심사를 정말로 분리하고 싶다면 양식을 장식하지 않은 채로 만든 다음 뷰 스크립트에 데코레이터를 추가 할 수 있습니다 (일부 사용자 정의보기 도우미 사용). 이것은 내가 가장 신경 쓰지 만, 나는 결코 그렇게하기가 힘듭니다.

별도의 양식에 장식을 설정하는 독립 클래스의 예

, 그것은/뷰/폴더에 액세스 할 수있는 frontender에서 (템플릿을해야 하나 제 생각에는 EasyBib_Form_DecoratorUsing Zend_Form without Zend Framework MVC

체크 아웃 . 당신은 거의 ViewScript decorator

$form->setDecorators(array(
    array('ViewScript', array(      // note case 
     'viewScript' => '_partials/forms/my.phtml', // note case 
))); 
,691 사용하여 해당 기능을해야합니까

: 또는 내가 좋아하는 뭔가를 할 수 있어야한다말했다 는

, 원하는 마크 업 표준 장식 자 사용하여 비교적 간단합니다 : 물론

// not tested, but should be pretty close 
$element->setDecorators(array(
    'ViewHelper', 
    'Label', 
    'Errors', 
    array('HtmlTag', array('tag' => 'div', 'attribs' => array('class' => 'labeledField'))), 
)); 

양식의 특별한 스타일 또는 클라이언트 측 조작 - 예를 들어, 당신이 인용 애플 카트 효과 - 수 있습니다 클라이언트 측에서이 마크 업에 계층화되어 있습니다.

+0

모든 정보를 제공해 주셔서 감사합니다. 지금까지 들었던 것이 최선입니다. 나는 아직도 그것의 함께 결합의 논리를 얻지 않는다 : D 당신의보기는 상자에서 일하고 그러나 경미하게 다른 무언가를 위해 그것을 사용하는 것을 시도는 다만 작동하지 않으며 나는 나가 생각한 어떻게 생각해 내 머리를 긁고있다. 그것을 논리적으로 생각해보십시오.

Checkbox Label

+0

을 얻기 위해 노력하는 I가이 : '$ checkboxDecorator = 배열 ​​( \t \t 'ViewHelper', \t \t '라벨', \t \t '오류', \t \t 배열 ('HtmlTag', 배열 (' 태그 '=>'DIV ','클래스 '=>'체크 박스 ')), \t \t 배열 ('라벨 ', 배열 ('위치 ','APPEND ')) \t)' 그러나 라벨 컨테이너 바깥에있어. 그래서 너는 그 조각을 y 전에 끝내야한다고 생각해. ou는 그것을 감쌌다. .. 그들은 둘 다 감싸 였지만 그것도 덧붙여지지 않았다! 잘 모르겠다. –

+0

이제는 버그가있다. 'label'을 'Label'로 바꾸어서 고쳤지만, 다음은 소문자와 대문자 모두에서 작동한다.'$ checkboxDecorator = 배열 ( \t \t 'ViewHelper', \t \t 배열 ('라벨', 배열 ('배치'=> 'APPEND')) \t) 너무 많은 회신에 대한 있지만 다른 사람이 같은 가로 질러 주셔서' –