jasco-b/view-model

为 Yii2 的视图模型

1.0.2 2020-02-05 12:40 UTC

This package is auto-updated.

Last update: 2024-09-08 06:08:41 UTC


README

此视图模型由 Yii2 启发,灵感来自 laravel view model

安装

您可以通过 composer 安装此包

composer require jasco-b/view-model

用法

在 Yii2 或任何其他框架的 CRUD 操作中,通常需要开发者在创建和更新操作中使用相同的数据。例如

旧控制器

class PostController extends Controller
{
  ...
  
  public function actionCreate() 
  {
      $model = new Post();
      $categories = Categories::find()->all();
      ...
      
      return $this->render('create', [
        'model'         => $model,
        'categories'    => $categories,
      ]);
  }
  
    public function actionUpdate($id) 
    {
      $model = $this->findModel($id);
      $categories = Categories::find()->all();
      ...
      
      return $this->render('update', [
        'model'         => $model,
        'categories'    => $categories,
      ]);
    }

}

如您所见,$categoreis 已在创建和更新操作中使用。您可以使控制器更加整洁,甚至可以将您的复杂逻辑添加到视图模型中。

视图模型

...
use jascoB\ViewModel\ViewModel;

class PostViewModel extends ViewModel
{
    public $model;

    public function __construct($model)
    {
        $this->model = $model;
    }
    
    public function categories()
    {
        return $categories = Categories::find()->all();
    }
}

控制器

class PostController extends Controller
{
  ...
  
  public function actionCreate() 
  {
      $model = new Post();
      ...
      
      return $this->render('create', new PostViewModel($model));
  }
  
    public function actionUpdate($id) 
    {
      $model = $this->findModel($id);
      ...
      
      return $this->render('update', new PostViewModel($model));
    }

}

为了在 Yii2 中使用视图模型,我们应该更改 config.php

return [
    'components' => [
        'view'=>[
            'class'=>'jascoB\ViewModel\Classes\View',
        ],
    ],
];