以下均在basic框架中进行的操作,advanced版可以参考
视图文件:
//以下common.php位于views下的layouts文件夹中,about.php位于views文件夹下面的hello文件夹中 class HelloController extends Controller{ public $layout = 'common'; //视图文件夹中的common.php,在其中输出$content public function actionIndex(){ return $this->render('about'); //视图文件夹中的about.php内容返回到一个$content变量中 } }
视图文件中的转义
//对JS等代码进行转义仍显示在前端 use yii\helpers\Html; Html::encode() //对JS等代码进行处理不显示在前端 use yii\helpers\HtmlPurifier; HtmlPurifier::process()
HelloController.php(访问路径web/index.php?r=hello/index)
namespace app\controllers; use yii\web\Controller; class HelloController extends Controller{ //方法前要加action public function actionIndex(){ // get\post相关方法需使用全局命名空间YII // $request = \YII::$app->request; // 下面的DEFAULT_VALUE为name不存在时所显示的值 // $request->post('name','DEFAULT_VALUE'); // 判断是否通过GET方式请求,同理isPost // if($request->isGet){ // echo $request->get('id','DEFAULT_VALUE'); // } // //获取用户IP地址 // echo $request->userIp; // 响应设置 $res = \YII::$app->response; // $res->headers->add('pragma', 'no-cache'); // $res->headers->set('pragma','max-age=5'); // $res->headers->remove('pragma'); //跳转 // $res->redirect('http://www.baidu.com',302); // $this->redirect("http://alanhou.org",301); //下载文件 // $res->headers->add('content-disposition','attachment; filename="a.jpg"'); // $res->sendFile('./robots.txt'); // $res->statusCode = '404'; } }
Session相关
$session = \YII::$app->session; $session->open(); //判断session是否开启 // if($session->isActive){ // echo "session is active"; // } // 方法一:$session->set('user','Alan'); // 方法二:$session['user'] = 'Alan'; // echo $session->get('user'); // $session->remove('user'); // unset($session['user']);
Cookie相关
namespace app\controllers; use yii\web\Controller; use yii\web\Cookie; class HelloController extends Controller{ public function actionIndex(){ // $cookies = \YII::$app->response->cookies; // $cookie_data = array('name'=>'user', 'value'=>'Alan'); // $cookies->add(new Cookie($cookie_data)); // $cookies->remove('user'); $cookie = \YII::$app->request->cookies; //DEFAULT_VALUE为user这个cookie不存在时默认显示的值 echo $cookie->getValue('user','DEFAULT_VALUE'); } }
Model文件-操作数据库
1.在config/db.php配置数据库信息
2.models下创建一个Test.php,用于操作test表
namespace app\models; use yii\db\ActiveRecord; class Test extends ActiveRecord{ }
3.在controller的文件中进行操作
//首先引入: use app\models\Test; //在方法中进行代码书写 [php] //**查询数据** // $sql = 'SELECT * FROM test WHERE id=1'; // $results = Test::findBySql($sql)->all(); //当用户传入值时可通过占位符:id形式防止sql注入 // $sql = 'SELECT * FROM test WHERE id=:id'; // $results = Test::findBySql($sql, array(':id'=>'1 or 1=1'))->all(); //如果是id>1则将where修改为where(['>','id',1]) //id>=1 and id<=2 where('between', 'id', 1, 2) //默认返回对象的形式,比较占用资源,可以添加asArray()转换成数组 $results = Test::find()->where(['id'=>1])->asArray()->all(); print_r($results); //批量查询 foreach(Test::find()->batch(2) as tests){ print_r($tests); } //**删除数据** // 方法一 // $results = Test::find()_>where(['id'=>2])-all(); // $results[0]->delete(); //方法二 Test::deleteAll('id>=:id', array(':id'=>2));
增加数据时为保证安全通常会进行数据的检测,详细内容可参考 http://www.yiichina.com/doc/guide/2.0/tutorial-core-validators
以下简单的在models/Test.php加入代码进行验证
class Test extends ActiveRecord{ public function rules(){ return [ ['id', 'integer'], ['title', 'string', 'length'=>[0,10]] ]; } }
controller文件中:
// 增加数据 $test = new Test; $test->id = '1'; $test->title = 'blahblah'; $test->validate(); if($test->hasErrors()){ die("ERROR"); } $test->save();
修改数据
// 修改数据 $test = Test::find()->where(['id'=>1])->one(); $test->title = 'title 1 modified'; $test->save();
Composer安装
curl -sS http://install.phpcomposer.com/installer | php php composer.phar global require "fxp/composer-asset-plugin:~1.1.1" php composer.phar create-project --prefer-dist yiisoft/yii2-app-basic 2.0.7