Хочу сделать так, как подсказали в этом видео-уроке https://youtu.be/WL0-bd2Afho?t=385 с 6.25 по времени.
Сказали чтобы получалось лучше, чтобы проще было потом поддерживать и расширять приложение, стоит выделять какую то бизнес логику в отдельные классы и не помещать её ни в модели, ни в контроллеры, ни тем более во вьюхи.
Я решил попробовать, у меня есть несколько разных таблиц, в каждой из них есть поле disable, которое означает запись активна или нет. Выбрал самый простой случай чтобы попробовать вынести логику из модели.
Раньше в модели был экшн:
Код: Выделить всё
public function actionDisable($id)
{
$model = $this->findModel($id);
$model->disable = 1;
$model->save();
return $this->redirect(Yii::$app->request->referrer);
}
Я решил, т.к. у меня разные модели содержат одно и тоже действие actionDisable/Enable вынести это в отдельный класс, к примеру ModelDeleter, реализовав его так:
Код: Выделить всё
namespace app\models;
use yii\db\ActiveRecord;
class ModelDeleter
{
const STATUS_ENABLED = 0;
const STATUS_DISABLED = 1;
protected $model;
public function __construct(ActiveRecord $model) {
$this->model = $model;
}
public function disable() {
$this->model->disable = self::STATUS_DISABLED;
$this->model->save();
}
public function enable() {
$this->model->disable = self::STATUS_ENABLED;
$this->model->save();
}
}
внутри контроллера я писал аналогично, как в видео:
public function actionDisable($id)
{
$serviceCenter = $this->findModel($id);
Yii::createObject(ModelDeleter::class, [$serviceCenter])->disable();
return $this->redirect(Yii::$app->request->referrer);
}
и оно не работало. В тоже время в model в ModelDeleter попадает нужная модель, но она не устанавливается как disable, как ни крути.
Подскажите что можно тут исправить, чтобы можно было передавать в такой класс модель любого типа, которая содержит поле disable и чтобы можно было этой ModelDeleter выполнять disable и enable над переданной моделью. Спасибо