我在Yii2评论模型中写了两个场景,当用户登录或是访客时。
我的规则是:
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_GUEST] = ['name' , 'email'];
$scenarios[self::SCENARIO_USER] = ['user_id'];
return $scenarios;
}
和senarios funtion:
$commentModel = Yii::$app->user->isGuest ? new Comment(['scenario' => Comment::SCENARIO_GUEST]) : new Comment(['scenario' => Comment::SCENARIO_USER]);
我按如下方式使用它:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello Django</title>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="stylesheet" href="{% static "css/style.css" %}">
<link rel="stylesheet" href="{% static "css/style2.css" %}">
<script src="{% static 'js/jquery.1.12.4.min.js' %}"></script>
<script type="text/javascript" src="{% static "js/main.js" %}"></script>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
{% block js %}{% endblock %}
</head>
<body>
{% block content %}{% endblock content %}
</body>
</html>
如果客人查看表单,只检查姓名和电子邮件以及用户填写表单,则不检查任何字段! 为什么其他规则不检查?如何解决?
答案 0 :(得分:4)
scenario()方法返回一个数组,其键是方案名称,并且值为相应的活动属性。可以大规模分配活动属性并进行验证。
# Create simple example
df <- cbind.data.frame(A=c("A","B","C")
,B=c(1,2,3)
,Timestamp_1=c(as.POSIXct(NA),as.POSIXct("2018-05-04 00:19:41"),as.POSIXct("2018-07-31 22:09:10"))
,Timestamp_2=c(as.POSIXct("2018-05-04 00:18:45"),as.POSIXct("2018-05-05 00:18:43"),as.POSIXct("2018-06-05 00:00:01"))
,Timestamp_3=c(as.POSIXct("2018-05-04 00:19:13"),as.POSIXct("2018-05-05 00:17:00"),as.POSIXct("2018-05-06 00:18:41"))
,C=c("Dog","Cat","Mouse")
)
df
A B Timestamp_1 Timestamp_2 Timestamp_3 C
1 A 1 <NA> 2018-05-04 00:18:45 2018-05-04 00:19:13 Dog
2 B 2 2018-05-04 00:19:41 2018-05-05 00:18:43 2018-05-05 00:17:00 Cat
3 C 3 2018-07-31 22:09:10 2018-06-05 00:00:01 2018-05-06 00:18:41 Mouse
答案 1 :(得分:2)
如果使用scenarios()
,则需要定义在给定方案中允许分配的所有属性。因此,如果您希望允许访客同时修改sudo stop zeppelin; sudo start zeppelin
和body
,您需要以下内容:
date
如果您在方案之间有许多“共享”属性,则可能不应覆盖此方法并仅在public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_GUEST] = ['name' , 'email', 'body', 'date'];
$scenarios[self::SCENARIO_USER] = ['user_id'];
return $scenarios;
}
中定义它。
在scenarios documentation中查看更多内容。