내 응용 프로그램에는 자신의 위젯을 사용하여 많은 모듈과 많은 양식이 있습니다.
나는 위젯 세계적으로 '해제', '숨기기'또는 '전용 읽기 메이크업'을 시도하고있다.
양식의 구성 () 기능 중 하나의 위젯을 사용하여 가능하다는 것을 알고 있지만 가능한 한 글로벌 방식으로 더 나은 해결책을 찾고 있습니다. 모든 모듈 양식을 변경하고이를 추적하는 것은 어려울 수 있습니다.
스레드가 약간 길 수도 있지만 문제를 쉽게 이해할 수 있다고 생각합니다. 읽어 주셔서 감사합니다. :)
몇 가지 옵션을 테스트하기 위해 Timestampable 비헤이비어가있는 간단한 뉴스 모듈을 만들었지 만 여전히 아무 것도 작동하지 않았습니다.symfony 1.4 어떻게 폼 위젯을 전역 적으로 설정 해제, 숨기기 또는 읽기 만할까요?
- 테이블 :
TbNews
- 열 :
id
뉴스 컨텐츠를 저장하기위한 텍스트 필드로scontent
키 차있다.created_at
으로 날짜 시간. (Timestampable 동작)updated_at
으로 날짜 시간. (Timestampable 동작)
는
TbNews는 schema.yml 파일 :
TbNews: connection: doctrine_master tableName: tb_news columns: id: type: integer(8) fixed: false unsigned: false primary: true autoincrement: true scontent: type: string(64000) fixed: false unsigned: false primary: false notnull: true autoincrement: false actAs: Timestampable: created: name: created_at type: timestamp format: Y-m-d H:i:s options: notnull: false required: false updated: name: updated_at type: timestamp format: Y-m-d H:i:s options: notnull: false required: false
TbNews 형태가
(예를 들어, 만 쓴 updated_at 그 다시 updated_at 컬럼) : updated_at TbNews에 대한
class TbNewsForm extends PluginTbNewsForm { public function configure() { $this->setWidgets(array( 'updated_at' => new sfWidgetFormDateTime(), )); $this->setValidators(array( 'updated_at' => new sfValidatorDateTime(array('required' => false)), )); } }
템플릿 _form.php는 "에코 $ 양식 [ 'updated_at'
수동으로 updated_at 렌더링, 선택의 여지를 테스트 ] "그리고 그것을 렌더링하지 않고.lib/form/doctrine/BaseFormDoctrine.class.php
: 컬럼에서 update_at
<?php echo $form->renderHiddenFields(false) ?>
종합 시험 sfWidgetFormInputHidden()
함께
- 는 위젯 템플릿 렌더링되지 않는다.
설정하지 않은 상태에서 setWidget을 사용하여 설정을 해제하지 않고 테스트 ...가능한 모든 옵션이 있지만 updated_at 필드는 템플릿에 렌더링되지 않습니다. _form.php 템플릿에
추가에게 필드updated_at
을,하지만이 읽은 상태로 표시되지 : (사용 renderHiddenFields())
abstract class BaseFormDoctrine extends sfFormDoctrine { public function setup() { $value_updated_at = $this->getObject()->updated_at; unset($this->widgetSchema['updated_at']); unset($this->validatorSchema['updated_at']); $this->widgetSchema['updated_at'] = new sfWidgetFormInputHidden(); $this->widgetSchema['updated_at']->setOption('is_hidden', 'true'); $this->widgetSchema['updated_at']->setOption('type', 'hidden'); $this->setDefault('updated_at', $value_updated_at); $this->setWidget('updated_at', new sfWidgetFormInputHidden(array('value'=>$value_updated_at))); //$this->setWidget('updated_at', $this->widgetSchema['updated_at']); } }
- 와 읽기 전용 만.
sfWidgetFormDateTime
으로는 작동하지 않습니다.$this->widgetSchema['updated_at']->setAttribute('readonly', 'readonly');
질문과 생각 :
아마
BaseFormDoctrine
모든 형태의 모듈에서 위젯 글로벌 변화에 대한 올바른 방법이 아니거나 내 테스트에서 무엇인가 잘못이 있습니다. 아마도 위의 코드를 양식 위젯
TbNewsForm configure()
에서 직접 사용하면 위젯을 한 유형에서 다른 유형으로 쉽게 변경하고 개별적으로 렌더링하거나 숨길 수 있습니다.
- 그러나 어떻게 글로벌 방식으로 구현할 수 있습니까?
- symfony Doctrine의 핵심 코드를 변경해야합니까? 당신이 그것을 읽을 시간이 걸릴 수 있다면
당신에게 정말 고마워요, 어떤 의견이나 해결책은 도움이되지 않습니다 BaseFormDoctrine
클래스를 변경 :
, 당신은'updated_at' 및'created_at'가 숨겨하려는 모든 양식? – j0k
예 j0k이지만 created_at 및 updated_at 필드가있는 모든 모듈에 영향을줍니다. – xtrm
또한 전역 적으로 만 테스트 됨 BaseFormDoctrine에서 해당 필드를 설정 해제했지만 업데이트시 created_at에 대한 NULL 값이 저장됩니다. UPDATE tb_news SET scontent = 'content3', created_at = '', updated_at = '2013-02-07 11:59:29'WHERE id = '3'; 체크 리스너 코드는 C : \ php5 \ PEAR \ symfony \ plugins \ sfDoctrinePlugin \ lib \ vendor \ doctrine \ Doctrine \ Template \ Listener \ Timestampable.php에 있지만 쉬운 해결책은 없습니다. – xtrm