您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP框架 > Yii Framework

YII框架:用控制器写一个Hello World

作者:UncleToo  来源:原创  日期:2016-02-24 22:22:24
收藏  评论:( 0 )  阅读:366

根据YII框架的文件结构与Http请求的生命周期,我们知道每一个请求发给入口脚本再到应用主题,应用主体会创建一个控制器来处理这个应用,那么我们就写一个输出Hello World的控制器吧。

namespace app\controllers;

use yii\web\Controller;

class MyController extends Controller {
public function actionIndex() {
echo 'hello world !';
}
}


对于一个控制器我认为有这么几点需要注意:
1. php文件名必须与类名一致。
2. 这个名字首字母必须大写,而且必须以Controller为后缀
3. 要继承yii\web\Controller这个类
4. 我们的控制器的命名空间必须为app\controllers.
5. 控制器类中要有一个公开方法,这个方法的名字必须以action为前缀,并且action后第一个字母要大写。

这样我们在浏览器中输入localhost[port]/[project name]/web/index.php?r=my/index 就可以把http请求发送到YII的入口脚本中。 其中r=my/index多解释一下:r是“路由”的意思,将请求发送给controller ID为“my”的控制器中,action ID为“index”

控制器+视图

修改一下我们的控制器:

public function actionIndex($param) {
return $this->render('index',['param' => $param]);
}

$this->render('index',['param' => $param])这个render是从Controller类中继承过来的,作用是渲染一个叫做index的视图,并把我们的参数带进去。如果没有参数,那么render函数的第二个参数可以不写。
我们就创建这个名叫index的视图

This is Parameter : <?= $param ?>

为了能让控制器根据render函数找到我们的视图,视图就要保存为/views/[Controller ID]/[View Name].php 也就是/views/my/index.php。
浏览器中输入localhost[:port]/[project name]/web/index.php?r=my/index&param=hello+world,就可以得到MyController控制器return回来的视图。

控制器+视图+模型

先创建一个模型MyModel,如下:

namespace app\models;

use yii\base\Model;

class MyModel extends Model {
public $name;
public $email;

   public function rules() {
return [
[['name', 'email'] , 'required'],
['email', 'email'],
];
}

}

这个就是我们的模型了,只有姓名和邮箱两个属性。rules函数提供了这个数据模型的填写规范[['name','email'], 'required'],这一句是name和email都是必须填写的,['email','email']的意思是email属性必须符合邮箱的填写规范。
下面要改一下我们的控制器:

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\MyModel;

class MyController extends Controller {
public function actionIndex() {
$model = new MyModel();
if($model->load(Yii::$app->request->post()) && $model->validate()) {
return $this->render('success',['model' => $model]);
} else {
return $this->render('model', ['model' => $model]);
}
}
}

控制器先判断是否提交过合格的表单,如果没有就去渲染需要用户填写的页面的视图等待提交回此控制器,如果有就去渲染展示页面的视图。展示页没什么好说的,这个提交页可以看看:

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;
$form = ActiveForm::begin();
?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<?= Html::submitButton("submit") ?>
<?php
ActiveForm::end();
?>

这个使用Yii框架提供的函数来生成一部分HTML,这么做会减少很多工作。而且如果这个表单是我们自己用HTML来写的话呢,会遇到一个问题:提交表单之后会遇到HTTP400错误,因为YII框架有一个防止csrf(跨站请求伪造)攻击的体制,所以我们手动写HTML一般来说是没法向其发送请求的。如果我们偏要手动的话,请在表单中加上: <input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">。





除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/yii/1174.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
上一篇: YII框架的优点
我来说两句
更多>>网友评论