Home  >  Article  >  Backend Development  >  Forms toolkit with sync token

Forms toolkit with sync token

WBOY
WBOYOriginal
2016-07-25 09:09:56908browse
The 2011 Universiade in Shenzhen was coming soon, so Shenzhen University wanted to develop a volunteer service station, and I was arrested by the Youth League Committee to serve. In the process, I wrote a small form toolkit. The verification function is not implemented by myself and relies on Kohana_Validate (Kohana V3.0x branch). But I followed what "J2EE Disgusting Mode" said and got a synchronization token to prevent repeated submission of forms. This component also sets up an abstraction layer. I think the verification code can also be integrated as a token subclass. But I don’t have time to do it now, so I’ll share the code first and wait for it to be sold~
  1. namespace Form;
  2. use VolunteerFormAbstractForm;
  3. class NewsPoster extends AbstractForm
  4. {
  5. /**
  6. * Add all preset form elements
  7. *
  8. * @abstract
  9. */
  10. public function bindAllElement()
  11. {
  12. $this->bindToken(' valid_token')
  13. ->addElement('news title', 'title',
  14. array(
  15. 'not_empty' => null,
  16. 'max_length' => array(60)
  17. ),
  18. array(
  19. 'trim ' => null,
  20. 'htmlspecialchars' => array(ENT_QUOTES),
  21. ))
  22. ->addElement('Abbreviated 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' => array(100),
  34. ),
  35. array(
  36. 'trim' => null,
  37. 'htmlspecialchars' => array(ENT_QUOTES),
  38. ))
  39. ->addElement('News Author & Reporter', 'author',
  40. array(
  41. 'max_length' => array(60),
  42. ),
  43. array(
  44. 'trim' => null,
  45. 'htmlspecialchars' => array(ENT_QUOTES),
  46. ))
  47. ->addElement('news editor', 'editor',
  48. array(
  49. 'max_length ' => array(60),
  50. ),
  51. array(
  52. 'trim' => null,
  53. 'htmlspecialchars' => array(ENT_QUOTES),
  54. ))
  55. ->addElement('News source', 'source',
  56. array(
  57. 'max_length' => array(60),
  58. ),
  59. array(
  60. 'trim' => null,
  61. 'htmlspecialchars' => array(ENT_QUOTES),
  62. ))
  63. ->addElement('News Category', 'category',
  64. array(
  65. 'not_empty' => null,
  66. 'digit' => null,
  67. 'regex' => array('~^[1- 9]d*$~')
  68. ),
  69. array())
  70. ->addElement('cover image', 'cover_image',
  71. array(),
  72. array(
  73. 'trim' => null,
  74. ' urlencode' => null,
  75. ))
  76. ->addElement('Contains media information', 'mediaTag',
  77. array(
  78. 'not_empty' => null,
  79. 'digit' => null,
  80. 'regex ' => array('~^[0123]$~')
  81. ),
  82. array())
  83. ->addElement('News summary', 'summary',
  84. array(
  85. 'max_length' => array (255),
  86. ),
  87. array(
  88. 'trim' => null,
  89. 'htmlspecialchars' => array(ENT_QUOTES),
  90. ))
  91. ->addElement('release status', 'state',
  92. array(
  93. 'not_empty' => null,
  94. 'digit' => null,
  95. 'regex' => array('~^[01]$~')
  96. ),
  97. array())
  98. -> ;addElement('"Whether to display on the homepage" option', 'showInHome',
  99. array(
  100. 'boolean' => null,
  101. ),
  102. array())
  103. ->addElement('News content', 'content ',
  104. array(
  105. 'not_empty' => null,
  106. ),
  107. array(
  108. 'tidy_parse_string' => array(
  109. array(
  110. 'indent' => true,
  111. 'output-xhtml' => true,
  112. 'clean' => true,
  113. 'drop-font-tags'=> true,
  114. 'show-body-only'=> true
  115. ), 'UTF8'),
  116. 'trim' => ; null
  117. ));
  118. }
  119. }
Copy code
  1. public function action_GET()
  2. {
  3. // Get the ID in the url
  4. $id = $this->request->param('id', null);
  5. // Send the token to View layer (placed in the hidden field of the form)
  6. $this->view['token'] = FormNewsPoster::getToken()->useToken();
  7. }
  8. public function action_POST()
  9. {
  10. $id = $this->request->param('id', null);
  11. $form = FormNewsPoster::factory($_POST);
  12. $form->bindAllElement();
  13. if ($form- >checkForm()) {
  14. // Verification passed, call the domain model to perform the operation~
  15. $this->view['success'] = true;
  16. } else {
  17. $this->view['success' ] = false;
  18. // Send the error message back to the view layer
  19. $this->view['message'] = array_values($form->getMessage());
  20. }
  21. }
Copy code
Forms toolkit with sync token Forms toolkit with sync token Forms toolkit with sync token


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn