2011년 심천 유니버시아드 대회가 코앞으로 다가오자 심천대학은 자원봉사 서비스소를 만들고자 했고, 나는 청년동맹위원회에 체포돼 봉사활동을 하게 됐다. 그 과정에서 나는 작은 양식 툴킷을 작성했습니다. 검증 기능은 직접 구현한 것이 아니며 Kohana_Validate(Kohana V3.0x 브랜치)를 사용합니다. 그러나 나는 "J2EE Disgusting Mode"의 말을 따랐고 양식의 반복 제출을 방지하기 위해 동기화 토큰을 얻었습니다. 이 구성 요소는 또한 추상화 계층을 설정하며 확인 코드도 토큰 하위 클래스로 통합될 수 있다고 생각합니다. 그런데 지금은 할 시간이 없어서 먼저 코드를 공유하고 팔리길 기다리겠습니다~
- 네임스페이스 양식;
- VolunteerFormAbstractForm 사용;
- class NewsPoster는 AbstractForm을 확장합니다
- {
- /**
- * 모든 사전 설정된 양식 요소 추가
- *
- * @abstract
- */
- 공용 함수 바인딩 AllElement()
- {
- $this->bindToken('valid_token')
- ->addElement('뉴스 제목', '제목',
- 배열 (
- 'not_empty' => null,
- 'max_length' => array(60)
- ),
- array(
- 'trim' => null,
- ' htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('축약된 URL', 'urlName',
- array(
- 'max_length' => array(50 ) ,
- 'regex' => array('~^[a-zA-Z0-9-%] $~')
- ),
- array(
- 'trim' => null ,
- 'urlencode' => null,
- ))
- ->addElement('keyword', 'keyWords',
- array(
- 'max_length' => 배열(100) ),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- -> '뉴스 작성자&기자', '작성자',
- array(
- 'max_length' => array(60),
- ),
- array(
- 'trim' => ; null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('뉴스 편집기', 'editor',
- array(
- 'max_length' => 배열 (60),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- -> addElement('뉴스 소스', '소스',
- array(
- 'max_length' => array(60),
- ),
- array(
- 'trim' => null,
- 'htmlspecialchars' => array(ENT_QUOTES),
- ))
- ->addElement('뉴스 카테고리', '카테고리',
- array(
- ' not_empty' => null,
- '숫자' => null,
- 'regex' => array('~^[1-9]d*$~')
- ),
- array())
- ->addElement('표지 이미지', '표지_이미지',
- array(),
- array(
- 'trim' => null,
- 'urlencode' => null ,
- ))
- ->addElement('미디어 정보 포함', 'mediaTag',
- array(
- 'not_empty' => null,
- 'digit' => null ,
- 'regex' => array('~^[0123]$~')
- ),
- array())
- ->addElement('뉴스 요약', '요약' ,
- array(
- 'max_length' => array(255),
- ),
- array(
- 'trim' => null,
- ' htmlspecialchars' => array( ENT_QUOTES),
- ))
- ->addElement('릴리스 상태', '상태',
- array(
- 'not_empty' => null,
- 'digit' => null,
- 'regex' => array('~^[01]$~')
- ),
- array())
- ->addElement( '"표시할지 여부 home page" option', 'showInHome',
- array(
- 'boolean' => null,
- ),
- array())
- ->addElement( '뉴스 콘텐츠' , 'content',
- array(
- 'not_empty' => null,
- ),
- array(
- 'tidy_parse_string' => array(
- array (
- ' 들여쓰기' => true,
- 'output-xhtml' => true,
- 'clean' => true,
- 'drop-font-tags' => show-body-only'=> true
- ), 'UTF8'),
- 'trim' => null
- ));
- }
- }
-
코드 복사
- public function action_GET()
- {
- // URL에서 ID 가져오기
- $id = $this->request->param(' id ', null);
-
- // 토큰을 뷰 레이어로 보냅니다(양식의 숨겨진 필드에 넣습니다)
- $this->view['token'] = FormNewsPoster:: getToken()- >useToken();
- }
-
- 공개 함수 action_POST()
- {
- $id = $this->request->param('id', null);
-
- $form = FormNewsPoster::factory($_POST);
- $form->bindAllElement();
-
- if ($form->checkForm()) {
- // 검증 통과, 도메인 모델을 호출하여 작업 수행~
- $this->view['success'] = true;
- } else {
- $this->view ['success'] = false;
- // 오류 메시지를 뷰 레이어로 다시 보냅니다.
- $this->view['message'] = array_values($form->getMessage());
- }
- }
코드 복사
|