使用数据库
准备数据库
CREATE TABLE `country` (
`code` CHAR(2) NOT NULL PRIMARY KEY,
`name` CHAR(52) NOT NULL,
`population` INT(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `country` VALUES ('AU','Australia',18886000);
INSERT INTO `country` VALUES ('BR','Brazil',170115000);
INSERT INTO `country` VALUES ('CA','Canada',1147000);
INSERT INTO `country` VALUES ('CN','China',1277558000);
INSERT INTO `country` VALUES ('DE','Germany',82164700);
INSERT INTO `country` VALUES ('FR','France',59225700);
INSERT INTO `country` VALUES ('GB','United Kingdom',59623400);
INSERT INTO `country` VALUES ('IN','India',1013662000);
INSERT INTO `country` VALUES ('RU','Russia',146934000);
INSERT INTO `country` VALUES ('US','United States',278357000);
数据库中创建一个名为country的表并插入简单的数据
配置数据库连接
config/db.php
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];
上面的配置可以在淫中通过Yii::$app->db表达式访问
创建活动记录
models/Country.php
class Country extends ActiveRecord
{
//
}
这个Country 类继承自yii\db\ActiveRecord。不用在里面写任何代码。yii就能根据类名匹配对应的表名
使用
//获取country表的所有行并以name排序
$contries = Country::find()->orderBy('name')->all();
//获取主键为“US”的行
$country = Country::findOne('US');
//输出'United States'
echo $country->name;
//修改name为“u.s.a”并在数据库中保存更改
$country->name = 'U.S.A';
$country->save();
创建动作
class CountryController extends Cotroller
{
public function actionIndex()
{
//从country表中取得所有数据
//使用Pagnation对象分页
// index操作渲染一个名为index 的视图,并传递国家数据和分页信息出去
$query = Country::find();
$pageination = new Pagination([
'defaultPageSize' => 5,
'totalCount' => $query->count(),
]);
$countries = $query->orderBy('name')
->offset($pageination->offset)
->limit($pageination->limit)
->all();
return $this->render('index', [
'countries' => $countries,
'pagination' => $pagination,
]);
}
}
创建视图
views/country/index.php
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Countries</h1>
<ul>
<?php foreach ($countries as $country): ?>
<li>
<?= Html::encode("{$country->name} ({$country->code})") ?>:
<?= $country->population ?>
</li>
<?php endforeach; ?>
</ul>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
试运行
观察一下,浏览器的url也会变
使用Gii生成代码
gii是yii中的一个模块。可以通过配置应用的modules属性开启它
config/web.php
$config = [
//
];
if (YII_ENV_DEV) {
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
如果当前是开发环境,应用会包含gii模块,模块类是yii\gii\Module
如果检查应用的入口脚本web/index.php,将看到这行代码将YII_ENV_DEV设为true
defined('YII_ENV') or define('YII_ENV', 'dev');
如此,应用处于开发模式下,按照上面的配置会打开gii模块,可以直接通过url访问gii
如果通过本机以外的机器访问gii,请不说会被出于安全原因拒绝,可以改配置允许访问
'gii' => [
'class' => 'yii\gii\Module',
'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'] // 按需调整这里
],
生成活动记录类
选择model Generator 生成活动记录类 ,填写表单
点击preview按钮,models/Country.php会被列在将要生成的文件列表中,点击generator代码会自动生成
生成crud代码
crud代表增查改删操作
试运行