Heim >Backend-Entwicklung >PHP-Tutorial >带同步令牌的表单工具包

带同步令牌的表单工具包

WBOY
WBOYOriginal
2016-07-25 09:09:56970Durchsuche
话说深圳 2011 的大运会不是要来啦嘛,于是深大要开发一个志愿者服务站,我被团委抓去服役了。过程中写了一个小小的表单工具包。验证功能不是我自己实现的,依赖 Kohana_Validate(Kohana V3.0x 分支)。但是自己就按照 《J2EE 恶心模式》所说,弄了个同步令牌,防止重复提交表单。这个组件也设置了抽象层,我觉得可以把验证码也作为一个令牌子类整合。但是现在没时间弄,先把代码分享上来等被拍砖啦~
  1. namespace Form;
  2. use Volunteer\Form\AbstractForm;
  3. class NewsPoster extends AbstractForm
  4. {
  5. /**
  6. * 添加所有预设表单元素
  7. *
  8. * @abstract
  9. */
  10. public function bindAllElement()
  11. {
  12. $this->bindToken('valid_token')
  13. ->addElement('新闻标题', '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('缩略网址', '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('关键字', 'keyWords',
  32. array(
  33. 'max_length' => array(100),
  34. ),
  35. array(
  36. 'trim' => null,
  37. 'htmlspecialchars' => array(ENT_QUOTES),
  38. ))
  39. ->addElement('新闻作者&记者', 'author',
  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' => array(60),
  50. ),
  51. array(
  52. 'trim' => null,
  53. 'htmlspecialchars' => array(ENT_QUOTES),
  54. ))
  55. ->addElement('新闻来源', 'source',
  56. array(
  57. 'max_length' => array(60),
  58. ),
  59. array(
  60. 'trim' => null,
  61. 'htmlspecialchars' => array(ENT_QUOTES),
  62. ))
  63. ->addElement('新闻分类', 'category',
  64. array(
  65. 'not_empty' => null,
  66. 'digit' => null,
  67. 'regex' => array('~^[1-9]\d*$~')
  68. ),
  69. array())
  70. ->addElement('封面图片', 'cover_image',
  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('新闻概要', 'summary',
  84. array(
  85. 'max_length' => array(255),
  86. ),
  87. array(
  88. 'trim' => null,
  89. 'htmlspecialchars' => array(ENT_QUOTES),
  90. ))
  91. ->addElement('发布状态', 'state',
  92. array(
  93. 'not_empty' => null,
  94. 'digit' => null,
  95. 'regex' => array('~^[01]$~')
  96. ),
  97. array())
  98. ->addElement('“是否显示在首页”选项', '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. '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. }
复制代码
  1. public function action_GET()
  2. {
  3. // 获取 url 中的 ID
  4. $id = $this->request->param('id', null);
  5. // 将令牌送到视图层(放在表单的隐藏域)
  6. $this->view['token'] = Form\NewsPoster::getToken()->useToken();
  7. }
  8. public function action_POST()
  9. {
  10. $id = $this->request->param('id', null);
  11. $form = Form\NewsPoster::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. }
复制代码
带同步令牌的表单工具包 带同步令牌的表单工具包 带同步令牌的表单工具包


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn