ArticleForm.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace common\models\forms;
  3. use common\helpers\Date;
  4. use common\components\Model;
  5. use common\helpers\Form;
  6. use common\models\Article;
  7. use common\models\ArticleCategory;
  8. use yii\base\Exception;
  9. /**
  10. * Login form
  11. */
  12. class ArticleForm extends Model
  13. {
  14. public $id;
  15. public $title;
  16. public $cid;
  17. public $content;
  18. /**
  19. * @inheritdoc
  20. */
  21. public function rules()
  22. {
  23. return [
  24. [['id', 'title', 'cid', 'content'], 'trim'],
  25. [['id', 'title', 'cid', 'content'], 'required'],
  26. //[['title'], 'unique', 'targetClass'=>Article::class, 'targetAttribute'=>'TITLE'],
  27. [['id'], 'exist', 'targetClass'=>Article::class, 'targetAttribute'=>'ID'],
  28. [['cid'], 'exist', 'targetClass'=>ArticleCategory::class, 'targetAttribute'=>'ID'],
  29. ];
  30. }
  31. public function attributeLabels()
  32. {
  33. return [
  34. 'id' => 'ID',
  35. 'title' => '标题',
  36. 'cid' => '分类',
  37. 'content' => '内容',
  38. ];
  39. }
  40. /**
  41. * 指定校验场景
  42. * @return array
  43. */
  44. public function scenarios()
  45. {
  46. $parentScenarios = parent::scenarios();
  47. $customScenarios = [
  48. 'add' => ['title', 'cid', 'content'],
  49. 'edit' => ['id','title', 'cid', 'content'],
  50. ];
  51. return array_merge($parentScenarios, $customScenarios);
  52. }
  53. /**
  54. * 申请
  55. * @return Article|null
  56. * @throws \yii\db\Exception
  57. */
  58. public function edit(){
  59. if(!$this->validate()){
  60. return null;
  61. }
  62. $db = \Yii::$app->db;
  63. $transaction = $db->beginTransaction();
  64. try {
  65. if($this->scenario == 'add'){
  66. $model = new Article();
  67. $model->CREATED_AT = Date::nowTime();
  68. } elseif($this->scenario == 'edit') {
  69. $model = Article::findOne(['ID'=>$this->id]);
  70. } else {
  71. $this->addError('edit', '提交场景不存在');
  72. return null;
  73. }
  74. $model->TITLE = $this->title;
  75. $model->CID = $this->cid;
  76. $model->CONTENT = '';
  77. $model->STATUS = 1;
  78. if(!$model->save()){
  79. throw new Exception(Form::formatErrorsForApi($model->getErrors()));
  80. }
  81. // 暂时把内容写入到文件中
  82. $path = \Yii::getAlias('@common/runtime/articleContent/').$model->ID;
  83. file_put_contents($path, $this->content);
  84. $transaction->commit();
  85. } catch (Exception $e) {
  86. $transaction->rollBack();
  87. $this->addError('edit', $e->getMessage());
  88. return null;
  89. }
  90. return $model;
  91. }
  92. }