>백엔드 개발 >PHP 튜토리얼 >동기화 토큰이 포함된 양식 도구 키트

동기화 토큰이 포함된 양식 도구 키트

WBOY
WBOY원래의
2016-07-25 09:09:56972검색
2011년 심천 유니버시아드 대회가 코앞으로 다가오자 심천대학은 자원봉사 서비스소를 만들고자 했고, 나는 청년동맹위원회에 체포돼 봉사활동을 하게 됐다. 그 과정에서 나는 작은 양식 툴킷을 작성했습니다. 검증 기능은 직접 구현한 것이 아니며 Kohana_Validate(Kohana V3.0x 브랜치)를 사용합니다. 그러나 나는 "J2EE Disgusting Mode"의 말을 따랐고 양식의 반복 제출을 방지하기 위해 동기화 토큰을 얻었습니다. 이 구성 요소는 또한 추상화 계층을 설정하며 확인 코드도 토큰 하위 클래스로 통합될 수 있다고 생각합니다. 그런데 지금은 할 시간이 없어서 먼저 코드를 공유하고 팔리길 기다리겠습니다~
  1. 네임스페이스 양식;
  2. VolunteerFormAbstractForm 사용;
  3. class NewsPoster는 AbstractForm을 확장합니다
  4. {
  5. /**
  6. * 모든 사전 설정된 양식 요소 추가
  7. *
  8. * @abstract
  9. */
  10. 공용 함수 바인딩 AllElement()
  11. {
  12. $this->bindToken('valid_token')
  13. ->addElement('뉴스 제목', '제목',
  14. 배열 (
  15. 'not_empty' => null,
  16. 'max_length' => array(60)
  17. ),
  18. array(
  19. 'trim' => null,
  20. ' htmlspecialchars' => array(ENT_QUOTES),
  21. ))
  22. ->addElement('축약된 URL', 'urlName',
  23. array(
  24. 'max_length' => array(50 ) ,
  25. 'regex' => array('~^[a-zA-Z0-9-%] $~')
  26. ),
  27. array(
  28. 'trim' => null ,
  29. 'urlencode' => null,
  30. ))
  31. ->addElement('keyword', 'keyWords',
  32. array(
  33. 'max_length' => 배열(100) ),
  34. ),
  35. array(
  36. 'trim' => null,
  37. 'htmlspecialchars' => array(ENT_QUOTES),
  38. ))
  39. -> '뉴스 작성자&기자', '작성자',
  40. array(
  41. 'max_length' => array(60),
  42. ),
  43. array(
  44. 'trim' => ; null,
  45. 'htmlspecialchars' => array(ENT_QUOTES),
  46. ))
  47. ->addElement('뉴스 편집기', 'editor',
  48. array(
  49. 'max_length' => 배열 (60),
  50. ),
  51. array(
  52. 'trim' => null,
  53. 'htmlspecialchars' => array(ENT_QUOTES),
  54. ))
  55. -> addElement('뉴스 소스', '소스',
  56. array(
  57. 'max_length' => array(60),
  58. ),
  59. array(
  60. 'trim' => null,
  61. 'htmlspecialchars' => array(ENT_QUOTES),
  62. ))
  63. ->addElement('뉴스 카테고리', '카테고리',
  64. array(
  65. ' not_empty' => null,
  66. '숫자' => null,
  67. 'regex' => array('~^[1-9]d*$~')
  68. ),
  69. array())
  70. ->addElement('표지 이미지', '표지_이미지',
  71. array(),
  72. array(
  73. 'trim' => null,
  74. 'urlencode' => null ,
  75. ))
  76. ->addElement('미디어 정보 포함', 'mediaTag',
  77. array(
  78. 'not_empty' => null,
  79. 'digit' => null ,
  80. 'regex' => array('~^[0123]$~')
  81. ),
  82. array())
  83. ->addElement('뉴스 요약', '요약' ,
  84. array(
  85. 'max_length' => array(255),
  86. ),
  87. array(
  88. 'trim' => null,
  89. ' htmlspecialchars' => array( ENT_QUOTES),
  90. ))
  91. ->addElement('릴리스 상태', '상태',
  92. array(
  93. 'not_empty' => null,
  94. 'digit' => null,
  95. 'regex' => array('~^[01]$~')
  96. ),
  97. array())
  98. ->addElement( '"표시할지 여부 home page" option', 'showInHome',
  99. array(
  100. 'boolean' => null,
  101. ),
  102. array())
  103. ->addElement( '뉴스 콘텐츠' , 'content',
  104. array(
  105. 'not_empty' => null,
  106. ),
  107. array(
  108. 'tidy_parse_string' => array(
  109. array (
  110. ' 들여쓰기' => true,
  111. 'output-xhtml' => true,
  112. 'clean' => true,
  113. 'drop-font-tags' => show-body-only'=> true
  114. ), 'UTF8'),
  115. 'trim' => null
  116. ));
  117. }
  118. }
코드 복사
  1. public function action_GET()
  2. {
  3. // URL에서 ID 가져오기
  4. $id = $this->request->param(' id ', null);
  5. // 토큰을 뷰 레이어로 보냅니다(양식의 숨겨진 필드에 넣습니다)
  6. $this->view['token'] = FormNewsPoster:: getToken()- >useToken();
  7. }
  8. 공개 함수 action_POST()
  9. {
  10. $id = $this->request->param('id', null);
  11. $form = FormNewsPoster::factory($_POST);
  12. $form->bindAllElement();
  13. if ($form->checkForm()) {
  14. // 검증 통과, 도메인 모델을 호출하여 작업 수행~
  15. $this->view['success'] = true;
  16. } else {
  17. $this->view ['success'] = false;
  18. // 오류 메시지를 뷰 레이어로 다시 보냅니다.
  19. $this->view['message'] = array_values($form->getMessage());
  20. }
  21. }
코드 복사
동기화 토큰이 포함된 양식 도구 키트 동기화 토큰이 포함된 양식 도구 키트 동기화 토큰이 포함된 양식 도구 키트


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.