一旦有了model,我们可以开始编写操作model的逻辑。我们把这些逻辑放在controller action里面。用录入登陆表单这个例子来说明,如下是需要的代码:
public function actionLogin()
{
$form=new LoginForm;
if(isset($_POST['LoginForm']))
{
// 收集用户输入的数据
$form->attributes=$_POST['LoginForm'];
// 验证用户输入,如果无效则重定位到前个页面
if($form->validate())
$this->redirect($this->user->returnUrl);
}
// 显示登陆表单
$this->render('login',array('user'=>$form));
}
上面写的是,我们编写LoginForm实例;如果请求是POST方式(意味着登陆表单是submit),我们产生一个$form,里面放着提交过来的数据 $_POST['LoginForm'];然后验证输入,如果成功,把用户请求url定位到相应需要授权的页面。如果验证失败,或者是第一次访问login页面的,把用户请求url定位到login的页面,login页面具体怎么写会在下一个小节里描写。
秘诀: 在login action里面,我们用$this->user->returnUrl获取之前需要验证的url。 因为CController正好有一个CWebUser的实例叫做user,用来存放用户session信息的(例如:用户名,状态等)。想要了解更多,看《Authentication and Authorization》这章。
大家注意这段在login action里面的php语句:
真如我们提到,这句话只是创建一个model存放用户提交来的数据。CModel里面以name-value数组形式定义了attributes属性,每个value被分配到相应的name属性上。所以如果$_POST['LoginForm']给了我们这样的数组,上面的代码将等同于后面的这长串代码(假设每个需要的属性这个数组都提供):
$form->username=$_POST['LoginForm']['username'];
$form->password=$_POST['LoginForm']['password'];
$form->rememberMe=$_POST['LoginForm']['rememberMe'];
提示:为了让$_POST['LoginForm']不提供字符串而是数组,根据惯例view页面的输入字段应该写model相应的名字。记住是,一个页面输入字段对应model(简称C)里面的一个属性C[a]。例如,我们用 LoginForm[username]去命名页面username输入字段。
剩下的工作是编写login view了,编写里面的html表单和相应的输入字段。
public function actionLogin()
{
$form=new LoginForm;
if(isset($_POST['LoginForm']))
{
// 收集用户输入的数据
$form->attributes=$_POST['LoginForm'];
// 验证用户输入,如果无效则重定位到前个页面
if($form->validate())
$this->redirect($this->user->returnUrl);
}
// 显示登陆表单
$this->render('login',array('user'=>$form));
}
上面写的是,我们编写LoginForm实例;如果请求是POST方式(意味着登陆表单是submit),我们产生一个$form,里面放着提交过来的数据 $_POST['LoginForm'];然后验证输入,如果成功,把用户请求url定位到相应需要授权的页面。如果验证失败,或者是第一次访问login页面的,把用户请求url定位到login的页面,login页面具体怎么写会在下一个小节里描写。
秘诀: 在login action里面,我们用$this->user->returnUrl获取之前需要验证的url。 因为CController正好有一个CWebUser的实例叫做user,用来存放用户session信息的(例如:用户名,状态等)。想要了解更多,看《Authentication and Authorization》这章。
大家注意这段在login action里面的php语句:
真如我们提到,这句话只是创建一个model存放用户提交来的数据。CModel里面以name-value数组形式定义了attributes属性,每个value被分配到相应的name属性上。所以如果$_POST['LoginForm']给了我们这样的数组,上面的代码将等同于后面的这长串代码(假设每个需要的属性这个数组都提供):
$form->username=$_POST['LoginForm']['username'];
$form->password=$_POST['LoginForm']['password'];
$form->rememberMe=$_POST['LoginForm']['rememberMe'];
提示:为了让$_POST['LoginForm']不提供字符串而是数组,根据惯例view页面的输入字段应该写model相应的名字。记住是,一个页面输入字段对应model(简称C)里面的一个属性C[a]。例如,我们用 LoginForm[username]去命名页面username输入字段。
剩下的工作是编写login view了,编写里面的html表单和相应的输入字段。