为什么我们在行动管理中使用$ model = new ModelName('search')?

时间:2012-11-06 06:56:31

标签: yii

即使我们正常创建对象,它也可以在动作管理中运行,那么为什么我们在创建对象时使用搜索参数呢?

我不明白以下代码的用法,这些代码在创建id时会发送modelobject以及

$model=new ModelName('search&id='.$_GET['id']);

3 个答案:

答案 0 :(得分:4)

该参数意味着模型场景,它告诉模型在需要场景的任何地方使用哪种场景,如验证。这里的文件说:

  

__ construct()方法public void __construct(string   $ scenario ='insert')$场景字符串场景名称。看到   CModel :: scenario以获取有关此参数的更多详细信息。

关于CModel::scenario文件的文档:

  

方案属性 public string getScenario()public void setScenario(string $ value)

     

返回使用此模型的方案。

     

场景会影响验证的执行方式以及可以使用的属性   被大规模分配。

     

如果调用validate(),则将执行验证规则   'on'选项未设置或包含当前方案值。

     

如果属性与a关联,则可以大量分配属性   当前方案的验证规则。请注意,例外情况是   不安全的验证器,将关联的属性标记为不安全   并且不允许大规模分配。

简单地说这意味着创建新模型并告诉它我们正处于搜索场景中。

答案 1 :(得分:2)

所以你想将值传递给模型中的Search方法吗?调用方法时:

$model = new ModelName::model()->search($_GET['id']);

在模型的search()方法中,修改如下:

public function search($id){
    ...
}

答案 2 :(得分:0)

如果您在视图中使用zii.widgets.grid.CGridView,则可以将参数传递为

'dataProvider'=>$model->search($id)并在模型中的搜索方案中接受此参数。