Yii 框架学习--01 框架入门
Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架。
Yii目前有两个主要的版本: 2.0 和 1.1。本文以YII 2.0.7为例。
环境需求
Yii2.0 框架有一些系统上的需求:
PHP 版本 >= 5.4
Mcrypt PHP 扩展
OpenSSL PHP 扩展
Mbstring PHP 扩展
特点
安装
Yii可以通过Composer或者压缩包安装。
使用Composer安装
与安装Laravel框架类似,很多人会卡在这一步。要么是不会Composer,要么就是无法使用Composer安装。
如果还不知道Composer,先去学习了解了解:
http://www.cnblogs.com/52fhy/p/5246013.html
如果无法使用用Composer安装,很有可能是仓库访问不了,即被墙了。先更新Composer仓库源:
# 修改 composer 的全局配置文件(推荐方式)
# 打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:composer config -g repo.packagist composer https://packagist.phpcomposer.com
接下来正式开始安装吧!
这里以YII 2.0 版本为例(PHP 版本 >=
5.4)。
# 指定2.0.7版本,项目主目录是myyii2
composer create-project yiisoft/yii2-app-basic yii2 2.0.7# 或者安装高级的应用程序模板:
composer create-project yiisoft/yii2-app-advanced yii2adv 2.0.7
yii2的高级版和基本版的区别在哪里呢?
其实没太大区别。yii2-app-basic只有一个web应用,而yii2-app-advanced是默认带了前台和后台两个web应用,将两个应用整合在一个project里面,然后用common应用存放一些两个应用公共的一些东西。
https://www.zhihu.com/question/27916823
这里以安装yii2-app-basic
为例。
等待安装(过程会比较长,期间还要github的token,建议还是下载一键安装包吧):
Installing yiisoft/yii2-app-basic (2.0.7)- Installing yiisoft/yii2-app-basic (2.0.7)Downloading: 100%Created project in yii2
Loading composer repositories with package information...Token (hidden):
Token stored successfully.- Installing yiisoft/yii2-composer (2.0.3)Downloading: 100%- Installing ezyang/htmlpurifier (v4.6.0)Downloading: 100%- Installing cebe/markdown (1.1.0)Downloading: 100%- Installing bower-asset/jquery (2.1.4)Downloading: 100%- Installing bower-asset/jquery.inputmask (3.1.63)Downloading: 100%- Installing bower-asset/punycode (v1.3.2)Downloading: 100%- Installing bower-asset/yii2-pjax (v2.0.4)Downloading: 100%- Installing yiisoft/yii2 (2.0.4)Downloading: 100%- Installing swiftmailer/swiftmailer (v5.4.1)Downloading: 100%- Installing yiisoft/yii2-swiftmailer (2.0.4)Downloading: 100%- Installing yiisoft/yii2-codeception (2.0.4)Downloading: 100%- Installing bower-asset/bootstrap (v3.3.5)Downloading: 100%- Installing yiisoft/yii2-bootstrap (2.0.4)Downloading: 100%- Installing yiisoft/yii2-debug (2.0.4)Downloading: 100%- Installing bower-asset/typeahead.js (v0.10.5)Downloading: 100%- Installing phpspec/php-diff (v1.0.2)Downloading: 100%- Installing yiisoft/yii2-gii (2.0.4)Downloading: 100%- Installing fzaninotto/faker (v1.5.0)Downloading: 100%- Installing yiisoft/yii2-faker (2.0.3)Downloading: 100%fzaninotto/faker suggests installing ext-intl (*)
Writing lock file
Generating autoload files
chmod('runtime', 0777)...done.
chmod('web/assets', 0777)...done.
chmod('yii', 0755)...done.
...
安装过程中注意的:
1、提前安装好Composer
2、安装插件:php composer.phar global require "fxp/composer-asset-plugin:1.0.0"
3、通过命令行开始安装:
这一步耗时比较长,因为它在下载yii2框架。需要github账号,若提示安装过程中输入你的GitHub的用户名和密码。那就输入它们并继续即可。如果需要输入token,注册登录github之后,在setting->Personal access tokens这里生成一个token,然后输入就可以了。复制粘贴(隐藏的),确认。
创建成功会在指定的项目根目录,如yii2
目录下生成web\
文件夹,里面有入口文件index.php
。
安装完便可以访问了:
http://localhost/yii2/web/index.php
显示:
Congratulations!
You have successfully created your Yii-powered application.
一键安装包下载
一键安装包是在 YII 源码的基础上安装了依赖库(也就是已经做过 composer install,已经有了 vendor 目录),对于刚接触 YII2 或者使用 Composer 受挫的用户能够提供快速上手实践 YII2 的捷径。
下载以下归档文件之一,然后将其解压缩到一个Web可访问的文件夹:
yii2-app-basic
https://github.com/yiisoft/yii2/releases/download/2.0.7/yii-basic-app-2.0.7.tgz
yii2-app-advanced
https://github.com/yiisoft/yii2/releases/download/2.0.7/yii-advanced-app-2.0.7.tgz
下载很慢的话直接去我的百度云下载:
http://pan.baidu.com/s/1gfEsVar
注意:
通过安装包安装的需要在配置文件config/web.php
,给 cookieValidationKey 配置项输入你的密钥:
'request' => [// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation'cookieValidationKey' => 'test', //建议填github上的token,随便填也行,不能是空],
cookieValidationKey的作用暂时不做详细讲解。
解压yii-basic-app-2.0.7.tgz
到服务器www目录,并更名为yii2
。修改config/web.php
填写密钥,然后访问:
http://localhost/yii2/web/index.php
提示:
Congratulations!
You have successfully created your Yii-powered application.
ok了!
下文均以yii-basic-app-2.0.7.tgz
源码进行搭建demo讲解。
项目结构
yii-basic-app
assets/ assets资源定义
commands/ 包含控制台命令类HelloController.php
config/ 应用配置db.php 数据库配置params.php 通用参数配置web.php web配置console.php cli配置
controllers/ 控制器SiteController.php
mail/ e-mails的视图文件
models/ 模型User.php
runtime/ 包含 Yii 在运行时生成的文件,例如日志和缓存文件
tests/ contains various tests for the basic application
vendor/ 包含已经安装的 Composer 包,包括 Yii 框架自身
views/ 视图
web/ 入口文件和静态资源assets/ 包含 Yii 发布的资源文件(javascript 和 css)index.php 应用入口文件
composer.json Composer 配置文件, 描述包信息
yii Yii 控制台命令执行脚本
yii.bat Yii 控制台命令执行脚本(Windows)
关于yii-basic-app
说明:
在浏览器底部可以看到一个工具栏。这是 Yii 提供的很有用的调试工具,可以记录并显示大量的调试信息,例如日志信息,响应状态,数据库查询等等。
Yii 实现了模型-视图-控制器 (MVC)设计模式,这点在上述目录结构中也得以体现。 models 目录包含了所有模型类,views 目录包含了所有视图脚本,controllers 目录包含了所有控制器类。
Yii 流程:
- 用户向入口脚本 web/index.php 发起请求。
- 入口脚本加载应用配置并创建一个应用实例去处理请求。
- 应用通过请求组件解析请求的路由。
- 应用创建一个控制器实例去处理请求。
- 控制器创建一个操作实例并针对操作执行过滤器。
- 如果任何一个过滤器返回失败,则操作退出。
- 如果所有过滤器都通过,操作将被执行。
- 操作会加载一个数据模型,或许是来自数据库。
- 操作会渲染一个视图,把数据模型提供给它。
- 渲染结果返回给响应组件。
- 响应组件发送渲染结果给用户浏览器。
控制器(Controllers)
控制器路径:controllers
。使用 app\controllers
命名空间。
示例:TestController.php
<?phpnamespace app\controllers;use Yii;
use yii\web\Controller;class TestController extends Controller{/*** index* Yii 使用 action 前缀区分普通方法和操作。action 前缀后面的名称被映射为操作的 ID*/public function actionIndex($msg = 'hello') {//index 视图应该存为 views/test/index.php 文件//按 views/控制器 ID/视图名.php 路径加载 PHP 文件return $this->render('index', array('msg' => $msg));}/*** my-index* 操作 ID 总是被以小写处理,如果一个操作 ID 由多个单词组成,单词之间将由连字符连接(如 my-index);* 操作 ID 映射为方法名时移除了连字符,将每个单词首字母大写,并加上 action 前缀。例子:操作 ID my-index 相当于方法名 actionMyIndex*/public function actionMyIndex($msg = 'hello') {return $this->render('my-index', array('msg' => $msg));}
}
创建对应的视图:
views/test/index.php
views/test/my-index.php
<!DOCTYPE html>
<head><meta charset="utf-8"><title>test</title>
</head><body><?php echo $msg;?>
</body>
访问:
http://localhost/yii2/web/index.php?r=test/index&msg=hello
http://localhost/yii2/web/index.php?r=test/my-index&msg=welcome
生成url
Yii::$app->urlManager->createUrl('index/test');
结果:/yii2/web/index.php?r=index%2Ftest
\yii\helpers\Url::to(array('index/test'));
结果:/yii2/web/index.php?r=index%2Ftest
路由(Route)
YII 路由与大多数框架如ThinkPHP、CI类似,是自动化的,不需要单独去配置。这点与Laravel不同。
URL 中的参数 r
代表路由。路由格式是 控制器 ID/操作 ID
。
示例:
http://localhost/yii2/web/index.php?r=test/index&msg=hello
代表TestController/actionIndex
,其中方法actionIndex
接收了一个参数,键名是msg
,键值是hello
。
实际上我们使用$_GET
也可以获取URL上的所有参数,包括路由r
。
配置
入口文件配置
//开启debug,应用会保留更多日志信息,如果抛出异常,会显示详细的错误调用堆栈
defined('YII_DEBUG') or define('YII_DEBUG', true);//环境定义
defined('YII_ENV') or define('YII_ENV', 'dev'); //dev,prod
全局配置
包含:
db.php 数据库配置
params.php 通用参数配置
web.php web配置
console.php cli配置
详见下章:http://www.cnblogs.com/52fhy/p/5349394.html
模型(Model)
Yii2 模型文件都放在 models
目录下,以及默认使用 app\models
命名空间。
Yii 里模型的类名
与文件名
是一模一样的。例如UserAddress.php
对应类UserAddress
。建议使用驼峰命名。
示例:models/EntryForm.php
<?phpnamespace app\models;use yii\base\Model;class EntryForm extends Model
{public $name;public $email;/*** 返回数据验证规则的集合*/public function rules(){return [//name 和 email 值都是必须的[['name', 'email'], 'required'],//email 的值必须满足email规则验证['email', 'email'],];}
}
注意:yii\base\Model
被用于普通模型类的父类并但与数据表无关。真正与数据的CURD相关的是yii\db\ActiveRecord
,继承自 yii\base\Model
,增加了数据库处理。
上面的示例中验证规则(rules)可以在控制器使用 yii\base\Model::validate()
方法触发数据验证。
如何在Controller里使用Model?
需要引入命名空间并实例化模型:
<?phpnamespace app\controllers;use Yii;
use yii\web\Controller;
use app\models\EntryForm;//引入命名空间class TestController extends Controller{public function actionIndex($msg = 'hello') {$model = new EntryForm();if ($model->load(Yii::$app->request->post()) && $model->validate()) {return $this->render('index', array('msg' => $msg));}}
}
表达式
Yii::$app
代表应用实例,它是一个全局可访问的单例。同时它也是一个服务定位器,能提供 request,response,db 等等特定功能的组件。在上面的代码里就是使用 request 组件来访问应用实例收到的$_POST
数据。
视图(views)
视图根路径:views
。
视图与控制器对应关系:
按 views/控制器 ID/视图名.php
路径加载 PHP 文件
以上面的TestController
为例,有:
$this->render('index', array('msg' => $msg));
$this->render('my-index', array('msg' => $msg));
分别对应:
views/test/index.php
views/test/my-index.php
即控制器/方法
与视图目录是一一对应的。
视图内容其实就是html代码。为了防止跨站脚本(XSS)攻击
,我们可以在视图中使用yii\helpers\Html::encode()
进行处理:
views/test/index.php
<!DOCTYPE html>
<head><meta charset="utf-8"><title>test</title>
</head>
<body><?php use yii\helpers\Html; ?><?= Html::encode($msg) ?>
</body>
视图可以有子目录:
$this->render('sub/index', array('msg' => $msg));
对应:
views/test/sub/index.php
传递数据到视图
$this->render('index', array('msg' => $msg));
数据库操作
数据库配置
数据库相关配置文件都在 config/db.php
:
<?phpreturn ['class' => 'yii\db\Connection','dsn' => 'mysql:host=localhost;dbname=yii2basic','username' => 'root','password' => '','charset' => 'utf8',
];
上面配置的数据库连接可以在应用中通过 Yii::$app->db
表达式访问。
为了方便下文继续演示,这里新建一个数据库yii2basic
,并新建表country
:
CREATE TABLE `country` (`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,`code` CHAR(2) NOT NULL ,`name` CHAR(52) NOT NULL,`population` INT(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `country` VALUES (null, 'AU','Australia',18886000);
INSERT INTO `country` VALUES (null, 'CA','Canada',1147000);
INSERT INTO `country` VALUES (null, 'CN','China',1277558000);
INSERT INTO `country` VALUES (null, 'US','United States',278357000);
使用模型操作数据
为了使用ActiveRecord里面的方法,这里不再继承\yii\base\Model
,而是继承\yii\db\ActiveRecord
。
这里建立一个模型Country
:
<?phpnamespace app\models;use yii\db\ActiveRecord;class Country extends ActiveRecord{}
在里面写任何代码。只需要像现在这样,Yii就能根据类名去猜测对应的数据表名。如果类名和数据表名不能直接对应,可以覆写yii\db\ActiveRecord::tableName()
方法去显式指定相关表名:
public static function tableName() {return 'country';
}
控制器里使用模型:
首先引入命名空间:
use app\models\Country;
然后直接使用模型里的数据库操作方法:
public function actionListCountry() {//获取所有$list = Country::find()->orderBy('name')->all();//获取一条$one = Country::findOne('US');print_r($one->name);//更新/ 修改 name 为 U.S.A. 并在数据库中保存更改$one->name = 'U.S.A.';$one->save();}
Active Record
\yii\db\ActiveQuery
继承自\yii\db\Query
。
通过\yii\db\ActiveRecord::find()
可获取\yii\db\ActiveQuery
实例。
下面以Customer
模型及customer
作为演示。
新增(create)
yii\db\ActiveRecord::save()
yii\db\ActiveRecord::insert()
示例:
$customer = new Customer();
$customer->name = 'Qiang';
$customer->save(); // 等同于 $customer->insert();
删除(delete)
yii\db\ActiveRecord::delete()//静态方法,作用于整张表
yii\db\ActiveRecord::deleteAll()
示例:
// 删除已有客户记录
$customer = Customer::findOne($id);
$customer->delete();// 删除多个年龄大于20,性别为男(Male)的客户记录
Customer::deleteAll('age > :age AND gender = :gender', [':age' => 20, ':gender' => 'M']);
更新(update)
yii\db\ActiveRecord::save()
yii\db\ActiveRecord::update()//静态方法,作用于整张表
yii\db\ActiveRecord::updateCounters()
yii\db\ActiveRecord::updateAll()
yii\db\ActiveRecord::updateAllCounters()
示例:
$customer = Country::findOne('Li');
$customer->name = 'Qiang';
$customer->save(); // 等同于 $customer->update();// 所有客户的age(年龄)字段加1:
Customer::updateAllCounters(['age' => 1]);
查询(read)
yii\db\ActiveRecord::find() //返回ActiveRecord对象
yii\db\ActiveRecord::findBySql() //通过SQL查询返回ActiveRecord对象// 两个快捷方法:直接返回一个或者一组结果
yii\db\ActiveRecord::findOne() //返回第一个匹配到的实例
yii\db\ActiveRecord::findAll() //返回所有
find()返回一个ActiveRecord对象,需要使用one()或者all()获取最终数据。
findBySql()接收SQL,返回一个ActiveRecord对象,需要使用one()或者all()获取最终数据。
findOne()和findAll()直接返回对象数组,不需要再使用one()或者all()。
都支持静态方法或者直接调用。
示例:
/**find**/$m = new Country();$m->find()->all();//返回对象
$m->find()->one();//返回对象,仅返回一条记录
$m->find()->asArray()->all();//asArray()返回数组$m->find()->select('name')->column(); //返回指定字段的数组集合
$m->find()->column();//返回第一个字段的数组集合$m->find()->where(['name'=> 'China'] )->one();
$m->find()->where(['name'=> 'China'] )->all();
$m->find()->where(['name' => 'China', 'code' => 'CN'] )->all();
$m->find()->where(['name'=> 'China'] )->offset(1)->limit(1)->all();$m->find()->orderBy('id DESC')->all();
$m->find()->where(['name'=> 'China'] )->orderBy('code desc')->limit(2)->all();//andWhere与where是一样的,多个建议使用andWhere、orWhere
$m->find()->where(['id' => 1])->count();
$m->find()->where(['id' => 1])->andWhere(['code' => 'CN'])->count();
$m->find()->where(['id' => 1])->orWhere(['code' => 'CN'])->count();//findBySql
$m->findBySql('select * from country')->one();
$m->findBySql('select * from country')->all();/* where高级用法:当参数大于2个时且无键值对,第一个表示操作符
* [操作符, 操作数1, 操作数2, ...]
*/
//比较:>,<,=,>=,<=
$m->find()->where(['=', 'id', '3'])->all(); //id=3
$m->find()->where(['>', 'id', '3'])->all(); //id>=3//逻辑:and,or
$m->find()->where(['and', 'id=5', ['code' => 'CN']])->all();//即 id=5 AND code ='CN';字符型操作数需要用数组表示
$m->find()->where(['or', 'id=5', 'id=1'])->all();//between,not between
$m->find()->where(['between', 'id', 1, 3])->all(); //id between 1 AND 3//in,not in
$m->find()->where(['in', 'id', [1,2,3]])->all(); //id in (1,2,3)//like,or like, not like,or not like 不支持左右like
$m->find()->where(['like', 'name', 'A'])->all();
$m->find()->where(['like', 'name', ['A','B']])->all(); //exists,not exists//其它
$m->find()->scalar(); //此方法返回值的第一行第一列的值
$m->find()->count(); //此方法返回记录的数量
$m->find()->average(); //此方法返回指定列的平均值
$m->find()->min(); //此方法返回指定列的最小值
$m->find()->max(); //此方法返回指定列的最大值
$m->find()->exists();//此方法返回一个bool值指示是否可以查询数据//返回数组以 ID 为索引
$m->find()->indexBy('id')->all(); //distinct() 方法来去除重复行
$m->find()->select('name')->distinct()->all(); //SELECT DISTINCT `name` FROM `country`//groupBy,having
//SELECT `name`, count(*) as sum FROM `country` GROUP BY `name`
$m->find()->select(['name','count(*) as sum'])->groupBy('name')->all(); //SELECT `name`, count(*) as sum FROM `country` GROUP BY `name` HAVING `sum` >= 2
$m->find()->select(['name','count(*) as sum'])->groupBy('name')->having(['>=','sum', 2])->all(); //多表关联建议使用SQL
// yii\db\Query::join($type, $table, $on, $params) 类型(join,left,right),需要join的表,连接条件,可选参数
$m->find()->join('inner','articles', 'country.id = articles.id')->all();
$m->find()->innerJoin('articles', 'country.id = articles.id')->all();
//SELECT * FROM `country` INNER JOIN `articles` ON country.id = articles.id/**findOne(),findAll()**/
Country::findOne(1); // 返回 id 为 1 的数据
Country::findOne(['id' => 1,'status' => 1,
]);Country::findAll([1, 2, 3]); // 返回id为1、2、3的一组数据
Country::findAll(['status' => 1,]);/**批量获取**/// 一次提取 10 个客户信息
foreach ($m->find()->batch(10) as $customers) {// $customers 是 10 个或更少的客户对象的数组
}
// 一次提取 10 个客户并一个一个地遍历处理
foreach ($m->find()->each(10) as $customer) {// $customer 是一个 ”Customer“ 对象
}
// 贪婪加载模式的批处理查询
foreach ($m->find()->with('orders')->each() as $customer) {
}
注意:
调用 save()
、insert()
、update()
这三个方法时,会自动调用yii\base\Model::validate()
方法。如果验证失败,数据将不会保存进数据库。
更多查看:http://www.yiichina.com/doc/guide/2.0/db-active-record
使用Query查询
由于ActiveRecord是通过\yii\db\ActiveRecord::find()
获取的\yii\db\ActiveQuery
实例,而\yii\db\ActiveQuery
继承自\yii\db\Query
,那么其实可以直接使用\yii\db\Query
里的方法进行查询数据。
此时,除了ActiveRecord里的find()
、insert()
、update()
、updateAll
、delete()
、deleteAll()
、findBySql()
、asArray()
等不能使用外,其它的都是可以用的,例如where()
、all
、one
、limit
等等。
可以这么说,对于ActiveRecord
里示例里的查询方法,只要把find()
替换成from($table)
就可以用了。Query默认返回的数组,不是对象。下面是例子:
$m = new \yii\db\Query();
$table = 'country';$m->from($table)->all();//返回数组
$m->from($table)->one();//返回数组,仅返回一条记录$m->from($table)->select('name')->column(); //返回指定字段的数组集合
$m->from($table)->column();//返回第一个字段的数组集合$m->from($table)->where(['name'=> 'China'] )->one();
$m->from($table)->where(['name'=> 'China'] )->all();
$m->from($table)->where(['name' => 'China', 'code' => 'CN'] )->all();
$m->from($table)->where(['name'=> 'China'] )->offset(1)->limit(1)->all();
$m->from($table)->orderBy('id DESC')->all();
$m->from($table)->where(['name'=> 'China'] )->orderBy('code desc')->limit(2)->all();//andWhere与where是一样的,多个建议使用andWhere、orWhere
$m->from($table)->where(['id' => 1])->count();
$m->from($table)->where(['id' => 1])->andWhere(['code' => 'CN'])->count();
$m->from($table)->where(['id' => 1])->orWhere(['code' => 'CN'])->count();
http://www.yiichina.com/doc/guide/2.0/db-query-builder
事务
在Yii中,使用 yii\db\Transaction
来表示数据库事务。
一般情况下,我们从数据库连接启用事务,通常采用如下的形式:
$connection = \Yii::$app->db;
$transaction = $connection->beginTransaction();
try {$connection->createCommand($sql1)->execute();$connection->createCommand($sql2)->execute();// ... 执行其他 SQL 语句 ...$transaction->commit();
} catch(Exception $e) {$transaction->rollBack();
}
示例:
$dbTrans= Yii::app()->db->beginTransaction();
try{ $customer = new Customer();$customer->name = 'Qiang';if(!$customer->save()) throw newException("Error Processing Request", 1); $dbTrans->commit();
// $this->_end(0,'添加成功!!!');
}catch(Exception$e){ $dbTrans->rollback();
// $this->_end($e->getCode(),$e->getMessage());
Yii 框架学习--01 框架入门相关推荐
- 框架学习——WCF框架
框架学习--WCF框架 什么是WCF .NET平台下,有很多分布式技术 WCF 快速搭建一个WCF程序 1.ABC概念 2.如何定义WCF项目 参考资料 什么是WCF .NET平台下,有很多分布式技术 ...
- Flask框架学习整理——从零开始入门Flask
文章目录 Flask框架 一. 简介 二. 概要 三. 知识点(附代码) 1. Flask基础入门 1)路由route的创建: 2)endpoint的作用 3)request对象的使用 4)请求钩子b ...
- Spring框架学习【从入门到精通】
文章目录 初识Spring框架 时代变迁 Spring的野心 官网 框架组成 核心概念 三大核心组件的关系 主要jar组成 Spring框架两大核心:IoC和DI 概念 IoC DI IoC的XML方 ...
- Struts2框架学习笔记_Struts2入门
文章为学习struts的笔记,可供读者参考,有不足之处还望之指出. 参考: POJO与JavaBean的区别 Velocity Velocity官网 FreeMarker XSLT struts2 学 ...
- TinkPHP框架学习-01基本知识
1-----目录结构 2-----访问地址 3-----MVC开发 一 目录结构 |--Application 程序文件夹 |--Common 公共方法函数 |--Home 模块 |也可以自 ...
- Spring框架学习day_01: 框架配置方式/ 管理对象的作用域/ 生命周期/ 组件扫描/ 单例模式:“懒汉式“,“饿汉式“
1. Spring框架的作用 Spring框架的主要作用是创建对象和管理对象. 创建对象:类似于User user = new User(); 管理对象:随时可以通过Spring框架获取对象,甚至Sp ...
- 框架学习:框架是什么以及框架怎么学
框架就是framwork,百度上说框架是整个或部分系统的可重用性设计,是应用开发者定制的应用骨架.我个人认为框架是一系列的底层服务,让应用开发者调用这一系列的底层服务来快速开发他们想要做的应用程序. ...
- 【Python】flask框架学习 flask框架的基本使用
flask框架是什么? Flask 是一个轻量级的 Web 框架,用于构建 Web 应用程序.它基于 Python 编程语言和 Werkzeug 工具包,提供了简单易用的 API,可以轻松地创建 RE ...
- SpringMVC框架 学习DAY_01:框架概括 / 简易应用 / 核心执行流程图 /在框架下显示HTML模板页面/ 接受请求
1. SpringMVC框架的作用 MVC = Model(数据模型) + View(视图) + Controller(控制器) SpringMVC框架主要解决了接收请求与处理响应的问题,也可以认为是 ...
最新文章
- php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ]
- SAP MM 对采购订单执行收货,报错 - Table T169P entry ZNMI does not exist -
- vue 定义全局弹框_VUE路由拦截:Vue自定义全局弹窗组件
- Android左右声道控制软件,Android左右声道的控制
- PDH光端机常见故障问题解决方法
- 现代数学和理论物理已经发展到多么令人震惊的水平了?
- 中台,很多人理解的都不对
- Operating System-进程/线程内部通信-临界区(Critical Regions)
- 01-UIScrollView01-大图片展示
- 通过命令管理Windows7桌面防火墙
- python提取cad坐标_从CAD图里提取坐标的方法
- springboot整合mysql
- Matlab中的对数使用
- 【ECS】云服务器ECS是什么
- 包邮再送500份!我们自制了一张【数据分析知识鼠标垫】,抓紧领取
- IllegalArgumentException 异常
- 盘丝洞服务器维护,梦幻西游:明日维护公告解读!盘丝法宝调整,新增人物志玩法!...
- unity 2D游戏开发 制作帧动画的两种方法
- VSCode嵌入式硬件开发环境设置
- php study计算闰年,IOS_IOS获取指定年月的当月天数,前言
在开发IOS中常常需要用 - phpStudy...