Помогите сократить Экшен чайнику

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Помогите сократить Экшен чайнику

Сообщение alexa777 »

Привет. я подправил под себя Экшен, все работает, но поскольку я чайник) то подозреваю что это можно сделать гораздо проще, подскажите как плиз?
Суть в том, чтобы принимать нужный параметр $sort_job, определять по нему, что надо добавить Вакансию или Резюме и добавлять нужную инфу в $model->sort

Код: Выделить всё

   public function actionCreate($sort_job)
    {

        if ($sort_job === 'vac'){
        
            $model = new Job();

        if ($model->load(Yii::$app->request->post())) {
             $model->user_id = Yii::$app->user->id;
             $model->status = 'on';
             $model->sort = 'vacancies';
             $model->save();
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }    
            
        } elseif ($sort_job === 'res') {
         
            $model = new Job();

        if ($model->load(Yii::$app->request->post())) {
             $model->user_id = Yii::$app->user->id;
             $model->status = 'on';
             $model->sort = 'resume';
             $model->save();
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }    
        } else {
           return $this->render('404');
        } 
       
        
    }
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Помогите сократить Экшен чайнику

Сообщение SiZE »

Сделать отдельные экшены для создания сущностей. Создать собственные модели для каждой формы.

Код: Выделить всё

public function actionCreateVacancy()
{
  $model = new \forms\VacancyCreate();
  if ($model->load(Yii::$app->request->post())) {
    try {
      $service = new \services\VacancyCreate(Yii::$app->user);
      $service->createFromVacancyCreateForm($model);
      return $this->redirect(['view', 'id' => $service->getVacacncy()->id]);
    } catch (\Exception $e) {
       Yii::app()->session->setFlash('vacancyCreateError', 'Error on vacancy create');
    }
  }

  return $this->render('create', [
    'model' => $model,
  ]);
}
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: Помогите сократить Экшен чайнику

Сообщение proctoleha »

Код: Выделить всё

    public function actionCreate($sort_job)
    {
        $model = new Job();

        if ($sort_job !== 'vac' && $sort_job !== 'res') {
            throw new \DomainException('$sort_job must be vac or res');
        }
        
        if ($model->load(Yii::$app->request->post())) {
            $model->user_id = Yii::$app->user->id;
            $model->status = 'on';
            $model->sort = $sort_job == 'vac' ? 'vacancies' : 'resume';
            $model->save();

            return $this->redirect(['view', 'id' => $model->id]);
        }
        
        return $this->render('create', [
            'model' => $model,
        ]);
    }
Выучите что делает ключевое слово return
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Помогите сократить Экшен чайнику

Сообщение alexa777 »

proctoleha писал(а): 2018.02.16, 09:24
Выучите что делает ключевое слово return

Что не так? return тоже выводит как echo или возвращает данные. Объясните лучше поподробнее что имели ввиду
Последний раз редактировалось alexa777 2018.02.16, 11:40, всего редактировалось 1 раз.
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Помогите сократить Экшен чайнику

Сообщение alexa777 »

SiZE писал(а): 2018.02.16, 09:10 Сделать отдельные экшены для создания сущностей. Создать собственные модели для каждой формы.

Код: Выделить всё

public function actionCreateVacancy()
{
  $model = new \forms\VacancyCreate();
  if ($model->load(Yii::$app->request->post())) {
    try {
      $service = new \services\VacancyCreate(Yii::$app->user);
      $service->createFromVacancyCreateForm($model);
      return $this->redirect(['view', 'id' => $service->getVacacncy()->id]);
    } catch (\Exception $e) {
       Yii::app()->session->setFlash('vacancyCreateError', 'Error on vacancy create');
    }
  }

  return $this->render('create', [
    'model' => $model,
  ]);
}
В принципе вариант, но это еще больше кода и файлов, больше таблиц в БД, при таком раскладе я лучше при своем варианте останусь
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Помогите сократить Экшен чайнику

Сообщение SiZE »

alexa777 писал(а): 2018.02.16, 11:29 В принципе вариант, но это еще больше кода и файлов, больше таблиц в БД, при таком раскладе я лучше при своем варианте останусь
Хранение данных в БД и разделение форм никак не связано.

Кода немного больше, но он станет чище и понятнее. Каждый класс будет отвечать принципу единственной ответственности, на сколько это возможно в данной ситуации.
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Помогите сократить Экшен чайнику

Сообщение alexa777 »

SiZE писал(а): 2018.02.16, 11:52
alexa777 писал(а): 2018.02.16, 11:29 В принципе вариант, но это еще больше кода и файлов, больше таблиц в БД, при таком раскладе я лучше при своем варианте останусь
Хранение данных в БД и разделение форм никак не связано.

Кода немного больше, но он станет чище и понятнее. Каждый класс будет отвечать принципу единственной ответственности, на сколько это возможно в данной ситуации.
Впринципе ты прав, я просто не сразу понял фразу Создать новые модели(я понял что надо создавать новые таблицы и новые модели к ним) а ты про $model = new \forms\VacancyCreate();
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: Помогите сократить Экшен чайнику

Сообщение proctoleha »

alexa777 писал(а): 2018.02.16, 11:28
proctoleha писал(а): 2018.02.16, 09:24
Выучите что делает ключевое слово return

Что не так? return тоже выводит как echo или возвращает данные. Объясните лучше поподробнее что имели ввиду
В числе прочего ключевое слово return прекращает работу функции, или метода класса. Т.е. можно просто написать return; , без всего, и функция прекратит работу. И городить ифы после него совсем не нужно.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Помогите сократить Экшен чайнику

Сообщение alexa777 »

proctoleha писал(а): 2018.02.16, 13:58
alexa777 писал(а): 2018.02.16, 11:28
proctoleha писал(а): 2018.02.16, 09:24
Выучите что делает ключевое слово return

Что не так? return тоже выводит как echo или возвращает данные. Объясните лучше поподробнее что имели ввиду
В числе прочего ключевое слово return прекращает работу функции, или метода класса. Т.е. можно просто написать return; , без всего, и функция прекратит работу. И городить ифы после него совсем не нужно.
спасибо, теперь буду знать
Ответить