/** * Creates a new Series model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function actionCreate() { $model = new Series(); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('create', ['model' => $model]); } }
/** * Store a newly created series in storage. * * @return Response */ public function store() { $currentUser = $this->getUser(); Validator::extend('valid_uuid', function ($attribute, $value, $parameters) { if (preg_match("/^(\\{)?[a-f\\d]{8}(-[a-f\\d]{4}){4}[a-f\\d]{8}(?(1)\\})\$/i", $value)) { return true; } else { return false; } }); Validator::extend('series_exists', function ($attribute, $value, $parameters) use($currentUser) { if (Series::find($value)) { return false; } else { return true; } }); $messages = ['id.valid_uuid' => 'The :attribute field is not a valid ID.', 'comic_id.valid_uuid' => 'The :attribute field is not a valid ID.', 'id.series_exists' => 'The :attribute field is not a valid ID.']; $validator = Validator::make($data = $this->request->all(), ['id' => 'required|valid_uuid|series_exists', 'comic_id' => 'required|valid_uuid', 'series_title' => 'required', 'series_start_year' => 'date_format:Y'], $messages); if ($validator->fails()) { $pretty_errors = array_map(function ($item) { return ['title' => 'Missing Required Field', 'detail' => $item, 'status' => 400, 'code' => '']; }, $validator->errors()->all()); return $this->respondBadRequest($pretty_errors); } $comic = $currentUser->comics()->find($data['comic_id']); if ($comic) { $old_series_id = $comic->series_id; $series = new Series(); $series->id = $data['id']; $series->user_id = $currentUser->id; $series->series_title = $data['series_title']; $series->series_start_year = !empty($data['series_start_year']) ? $data['series_start_year'] : date('Y'); $series->series_publisher = !empty($data['series_publisher']) ? $data['series_publisher'] : "Unknown"; $series->save(); $comic->series_id = $series->id; $comic->save(); $seriesCount = Series::find($old_series_id)->comics()->get()->count(); if ($seriesCount == 0) { Series::find($old_series_id)->delete(); } return $this->respondCreated(['series' => [$series]]); } return $this->respondBadRequest([['title' => 'Invalid Comic ID', 'detail' => 'Invalid Comic ID', 'status' => 400, 'code' => '']]); }