对于封装的自我管理视图部件,请使用小部件。对于上述情况,您可以创建具有可配置阈值的小部件。
如果您必须要求不同的控制器来计算某些东西,这是一种不好的做法。将此类计算放在模型中。模型是高度可重用的,视图可以重用,但是控制器应该只响应动作并将数据绑定到视图。
胖模型,瘦控制器,明智的观点。
这是一些草稿代码:
首先使用任何需要的计算创建模型:
class Employee extends CActiveRecord
{
public function getTotalSalary()
{
// Do any calculations here
// ...
return $salary;
}
}
然后你可以在控制器中重用它:
class FirstController extends CController
{
public function actionPersonDetails()
{
$model = $this->_loadModel();
// By assigning this you will have getTotalSalary() available in view
$this->render('personDetails', ['model' => $model]);
}
}
class SecondController extends CController
{
public function actionViewSallary()
{
$model = $this->_loadModel();
// Also here you will have getTotalSalary() available in view
$this->render('viewSallary', ['model' => $model]);
}
}
对于需要独立创建小部件的更复杂的场景:
class EmployeesWidget extends CWidget
{
public $minSalary = 0;
private $_data = null;
public function init()
{
$this->_data = new CActiveDataProvider(/* Criteria here with $this->minSalary as param */);
}
public function run()
{
$this->render('employeesWidget', ['data' => $this->_data]);
}
}
然后您可以在任何视图中轻松使用它,甚至在其他小部件中:
$this->widget('path.to.EmployeesWidget', [
'minSallary' => 10000
]);