Друзья, здравствуйте! Случилась непонятная для меня лично дилемма, которую не могу решить уже более 5-ти часов. У меня есть модель ActiveRecord — Post, а также контроллер — PostController. В модели я создаю дополнительное поле upload, в которое загружаю изображение из контроллера. В контроллере я устанавливаю сценарий "create", а также в свойство upload передаю изображение. Так вот, если я добавляю свойство upload в сценарий create ( scenarios() ), то ActiveRecord модель Post не выполняет save() в таблицу, а если убираю свойство upload из сценария, тогда модель не валидирует это поле, но выполняет save() в таблицу. Подскажите пожалуйста, как разрешить это противоречие? Контроллер: PHP: <?php namespace app\controllers; use Yii; use yii\web\UploadedFile; use app\models\Post; class PostController extends RestController { public $modelClass = 'app\models\Post'; public function actionCreate() { $post = new Post('create'); $post->load(Yii::$app->request->post(), ''); $post->upload = UploadedFile::getInstanceByName('image'); return $post->create(); } public function behaviors() { $behaviors = parent::behaviors(); $behaviors['authenticator'] = [ 'class' => \yii\filters\auth\HttpBearerAuth::className() ]; return $behaviors; } } Модель: PHP: <?php namespace app\models; use Yii; class Post extends Rest { public $upload = null; public function create() { if (!$this->validate()) return self::createAnswer(401,'Invalid authorization data', ['status' => false, 'message' => 'Invalid authorization data', 'errors' => self::reidentErrors($this->errors)]); $this->image = 'web/post_images/' . $this->upload->name; $this->upload->saveAs($this->image); $this->upload = $this->image; $this->datetime = Yii::$app->formatter->asDate('now', 'yyyy-MM-dd hh:i:ss'); $this->save(); } public function __construct($scenario = 'default') { $this->scenario = $scenario; } public function scenarios() { return [ 'create' => [ 'title', 'datetime', 'anons', 'text', 'tags', 'image', 'upload' ] ]; } public function rules() { return [ [['title', 'anons', 'text'], 'required', 'on' => 'create'], ['upload', 'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, png', 'on' => 'create'] ]; } public static function tableName() { return '{{posts}}'; } } За ранее большое спасибо за потраченное время!
если не выполнился save, почти всегда есть записи об ошибках в модели. Посмотрите отладчиком, что внутри.
В моделе AR есть поле errors, в которое заносятся ошибки валидации. Если save не проходит, там обычно какое-нибудь сообщение имеется.
Но файл в upload загружен, как так.. Модель: PHP: public function create() { if (!$this->validate()) return self::createAnswer(401,'Invalid authorization data', ['status' => false, 'message' => 'Invalid authorization data', 'errors' => self::reidentErrors($this->errors)]); $this->image = 'web/post_images/' . $this->upload->name; $this->upload->saveAs($this->image); $this->upload = $this->image; $this->datetime = Yii::$app->formatter->asDate('now', 'yyyy-MM-dd hh:i:ss'); $this->save(); var_dump($this->errors);die; } Контроллер: PHP: public function actionCreate() { $post = new Post('create'); $post->load(Yii::$app->request->post(), ''); $post->upload = UploadedFile::getInstanceByName('image'); return $post->create(); } Причём картинка то загружается в папку --- Добавлено --- Проблема решена!