Php 视图中的Yii2组件函数

Php 视图中的Yii2组件函数,php,yii,yii2,components,yii2-advanced-app,Php,Yii,Yii2,Components,Yii2 Advanced App,我有一个观点,在这个观点中,我需要一些如下的直接查询 $count = Student::find()->where(['user_id'=>yii::$app->user->identity->id])->count(); $count = Yii::$app->mycomponent->sCount(); 但在yii2文档中,不建议使用它们 因此,我正在为此创建组件类,然后在视图中调用组件函数,如下所示 $count = Student::

我有一个观点,在这个观点中,我需要一些如下的直接查询

$count = Student::find()->where(['user_id'=>yii::$app->user->identity->id])->count();
$count = Yii::$app->mycomponent->sCount();
但在yii2文档中,不建议使用它们

因此,我正在为此创建组件类,然后在视图中调用组件函数,如下所示

$count = Student::find()->where(['user_id'=>yii::$app->user->identity->id])->count();
$count = Yii::$app->mycomponent->sCount();
MyComponent.php

<?php

 namespace app\components;

 use Yii;
 use yii\base\Component;
 use app\models\Student;

 class MyComponent extends Component
 {
  public function sCount()
  {
   $count =      Student::find()->where(['user_id'=>yii::$app->user->identity->id])->count();
   return $count;
  }
 }
?>


这里所有的工作都很好,我想知道这个逻辑是正确的,或者这和第一种情况一样。请建议正确的方法。

如果我在多个应用程序中大量使用的代码将与指定逻辑区域相关的一组常见功能分组,则可以使用组件 但对于与应用程序相关的功能
在MVC中,正确的方法是在controllerAction中执行主程序代码和db请求 对于函数模型的realted,正确的位置应该是模型本身或扩展模型,例如:modelSearch,查找与MDEL相关的serach函数 在渲染调用中将需要的值传递给视图,例如:

因此,您可以添加(或扩展)您的模型和添加功能

public function sCount()
{
  $count =      Student::find()->where(['user_id'=>yii::$app->user->identity->id])->count();
  return $count;
}
请参阅此功能,即您的控制器,例如:

class MyController  extends Controller
{

  ......
    public function actionMyView($id)
    {

        $count = $model->sCount();
        return $this->render('view', [
            'model' => $this->findModel($id),
            'count' => $count,
        ]);
    }
然后在视图中,您可以参考$count

  echo $count;

避免额外内存和CPU时间以支持事件和行为功能的另一个有效解决方案是使用helpers类。。用于管理周期性代码功能的类与单个型号不正确相关

,或者您可以这样提供计数

public function actionIndex()
{
    $query = Student::find();
    $cloneQuery = clone $query;
    $count = $cloneQuery->where(['user_id' => Yii::$app->user->identity->id])->count();
    $models = $query->all();
    return $this->render('index', [
        'models' => $models,
        'count' => $count
    ]);
}
并访问您的视图,如
$count

*有很多方法可以做到。但你必须遵循最佳实践

感谢您的回复。我对这两种模型没有任何关系,同时我只希望在该应用程序中的几个位置使用此功能,如主布局。那么组件可以吗?是的,您可以使用组件。。但同时也是一个帮手类。。该组件有三个主要功能属性、事件和行为。。如果您需要此组件。。如果没有,您可以构建一个helpers类,如果该函数与model不相关,那么非常感谢scaisEdge:)