请问,definitive guide中所说的场景是指什么?

比如,


// 在注册场景中, password 必须和 password2 一样

array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'),

// 在登录场景中, password 必须被校验

array('password', 'authenticate', 'on'=>'login'),

觉得应该是指action,也许指view.不过,为什么不直接用action或view呢?搞一个新词,让人迷惑。

才看YII,还没有通读definitive guide,未能理解,所以发问。

请明确。

谢谢!

action有自己特殊的定义,它是和MVC里的C紧密联系在一起的。而scenario则是M的一种属性。在很多场合里,两者可以一一对应,但也未必都是如此。所以认为scenario就是action容易引起混淆。(就像RBAC里的operation在很多场合里和action可以一一对应,但不能据此就认为operation就等价于action)。

谢谢qing的解答。

是不是可以这样理解,场景s就是id为s的action在被调用时所涉及的对M的调用范围。

如果这个概念不明确,那么涉及这个概念的校验器、方法调用会让人不知所从。

假设actionA的代码调用了actionB(可能正常不这么做),那么对涉及的M,会产生什么样的场景呢?

请再次解答以明确。

谢谢!

不是这样的。理论上,scenario是独立于action概念的。例如,你可以在没有action的场合下使用scenario。更具体点,你可能有一个console command,它进行数据迁移工作。那么,你可以认为涉及到的model将在一个叫做migration的scenario里使用。

因为scenario和action没有对应关系,所以actionA调用actionB不存在问题。

model的scenario是通过设置它的scenario属性设置的,它和使用model的action没有任何关系。

明白。

也很惭愧,努力看文档,争取少问这么没水平的问题。

再次谢谢你的耐心态度。

没关系。很多时候,作者自以为解释得很清楚了,而读者还是很糊涂。所以能问问题都是好的,无所谓水平高低之分(只要不是重复问同样的问题就行。;)

这个场景我也比较迷,想问下如果使用模型的时候没有明确指定是哪个场景,这种情况下是怎么处理的呢.谢谢!