BaseForm.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace hd\models;
  3. use Yii;
  4. use yii\base\Model;
  5. use common\components\util;
  6. /**
  7. * 管理员表单基类
  8. */
  9. class BaseForm extends Model
  10. {
  11. /**
  12. * 验证表单数据并返回结果
  13. *
  14. * @return bool 验证是否通过
  15. */
  16. public function validateForm()
  17. {
  18. if (!$this->validate()) {
  19. $errors = $this->getFirstErrors();
  20. $message = reset($errors);
  21. util::fail($message);
  22. return false;
  23. }
  24. return true;
  25. }
  26. /**
  27. * 自动加载并验证请求数据
  28. *
  29. * 自动检测请求类型(GET 或 POST),加载对应的数据并进行验证。
  30. * 相比手动指定 $method 参数,使用 $request->isGet 和 $request->isPost
  31. * 是 Yii 框架推荐的做法,更符合框架风格。
  32. *
  33. * 使用示例:
  34. * - POST 请求自动加载:$form->loadAndValidate();
  35. * - GET 请求自动加载:$form->loadAndValidate();
  36. *
  37. * @param string $formName 表单名称,用于嵌套数据
  38. * @return bool 验证成功返回 true,失败自动输出错误响应
  39. * @throws \yii\base\InvalidConfigException
  40. */
  41. public function loadAndValidate($formName = '')
  42. {
  43. $request = Yii::$app->request;
  44. // ✨ 优化:使用 Yii 提供的方法检查请求类型
  45. // 相比手动字符串比较 ($method === 'get'),这种方式更符合框架风格
  46. if ($request->isGet) {
  47. $data = $request->get();
  48. } elseif ($request->isPost) {
  49. $data = $request->post();
  50. } else {
  51. util::fail('不支持的请求方法');
  52. return false;
  53. }
  54. if (!$this->load($data, '')) {
  55. util::fail('数据加载失败');
  56. return false;
  57. }
  58. return $this->validateForm();
  59. }
  60. }