yii学习二:目录结构配置与组件介绍

1、目录结构说明

assets: 资源目录,一般定义了项目里会使用的JS和CSS文件路径

commands: CLI程序的控制器目录,新手建议删除,熟手你要进行PHP的CLI开发就保留

config: 配置文件目录,基本都是返回数组

controllers: 控制器目录

mail: 邮件模板目录

models: 模型目录,基本上就是ORM模型

runtime: 运行时目录,留空即可

    每次运行的缓存、日志、调试数据、自定义保存的数据等都会默认存到这里

   建议为这个runtime目录添加.gitignoreSVN忽略属性,忽略目录内所有的东西,这样任它运行时产生什么东东也不会被加入到     版本库

vendor: 扩展目录,除了有Yii框架,还有其它PHP扩展,基于Composer的打包规范

views: 视图目录,就是大家脑袋中想着被控制器display的那个嘛

web: web网站访问目录,相当于TP框架的public目录,WEB主机配置到这个目录就对了

以上所有目录的部署结构都可以完全自定义安排————等你玩熟了这个框架的话,都是可以配置修改的东西

2、创建一个类

平时实例化一个类都是new ClassName()这样的语法,但是Yii类提供了一个createObject的静态方法来创建类


2.1、通过配置来创建一个类

$config = [

       'class' => 'yii\log\FileTarget',

       'logFile' => 'D:/a.log',

       'maxFileSize' => 3306,

];

$target = Yii::createObject($config);

echo $target->logFile; // D:/a.log

echo $target->maxFileSize; //3306

config里的class就是要创建的类,$config['logFile']是控制了类的logFile属性,maxFileSize也是这个道理

一切配置的底层都是靠Yii::createObjectnew相关组件的,包括你未来自己扩展的配置

3、配置一个类

Yii::configure可以将一个与类的属性名对应的数组值注入到类的属性中

$target = new \yii\log\FileTarget();
$config = [
	'logFile' => 'D:/a.log',
	'maxFileSize' => 3306,
];
$target = Yii::configure($target, $config);
echo $target->logFile; // D:/a.log
echo $target->maxFileSize; //3306

4、配置文件

配置文件默认都放在@app/config目录下

一般情况下配置文件最终要做的事情就是返回一个数组,这些数组就像前面内容所暗示的那样,在底层通过Yii::createObject和Yii::configure来创建一个个最终让你调用的对象

1)、web.php配置文件:

它的数组第一层key是控制yii\web\Application这个类的,因为入口文件index.php中new yii\web\Application($config)

第一层配置key都有哪些作用,可以看看yii\web\Application的文档

2)、yii::$app

比如web.php第一层有个key叫id的话,那你是可以通过Yii::$app->id来得到配置的值的,===》$config()的第一层key

再比如,如果你把db这个key给删除了,那访问Yii::$app->db就会报错,因为没有装载db组件,Yii::$app可以通过components的配置来装载、卸载不同的组件。===》$config()的第二层key

Yii的这个静态属性 $app是框架初始化的时候就实例化的了,以后我们还要通过$app获取更多数据,以及调用更多东西,所以这个是我们将会最经常访问的全局单例对象,而web.php里面的第二层、第三层很多则是控制了app里面类型为object(对象)的属性

5、组件(yii\base\Component)

Yii总是强调自己是一个基于组件的框架,组件(yii\base\Component)是Yii应用的主要基石。组件是该类或其子类的实例

笼统地说,一切代码里关于Yii::$app->xxx的app的属性,如果这个属性是一个object,那你基本上可以理解为组件,比如:

Yii::$app->request

Yii::$app->response

Yii::$app->user

Yii::$app->log

Yii::$app->db

5.1、components属性定义组件

Yii让我们在配置文件的components这个key里定义组件

yii\base\Application::components 属性

入口文件index.php中new yii\web\Application($config)

核心类Application extends \yii\base\Application

在主配置文件中:

yii默认会根据components数组里面的键值去vendor\yiisoft\yii2\web 里面查找这个键值得类,如果没有找到,再根据这个键值得数组里面的Class属性去找这个类,如果这个键值得Class属性为空,而且vendor\yiisoft\yii2\web 没有键值命名的类,则会报错。

vendor\yiisoft\yii2\web 目录里面所有的类,我们都可以通过配置components数组,更改这些类的默认参数值。

5.2、组件的访问使用

1.一个应用组件会在第一次访问时实例化,使用如下方式访问组件:Yii::$app->urlManager;

2.如果如果处理请求过程没有访问的话就不实例化。有时你想在每个请求处理过程都实例化某个组件即便它不会被访问,可以将该组件ID加入到应用主体的 yii\base\Application::bootstrap 属性中。

5.3、核心应用组件

reqeust: 请求组件

主要负责提供请求相关的信息数据,调用urlManager组件实现解析URL到控制器方法,请求Cookie的校验读取,csrf攻击的防御

urlManager: URL管理组件

负责解析URL,它返回的值会告诉你:当前请求的URL想调用哪个模块的哪个控制器的哪个方法

view: 视图组件

负责渲染视图,并返回HTML字符串

response: 响应组件

主要负责将header和数据发送给客户端,还有cookie也是

并提供了重定向、发文件(提供下载)、响应图片|音频|视频等字节流的便捷方法,还可以自定义响应数据序列化的格式

db: 数据库组件

更多是使用yii\db\ActiveRecord和yii\db\Query这些类,它们的底层会自动调用db组件做事,还包括读写分离、数据库事务的控制

cache: 缓存组件

user: 用户组件:最常用这个组件去管登陆|访问授权相关的事情

log: 日志组件

5.4、添加自己的组件

先定义一个app\Test

namespace app;

class Test{
	public $name = 'x';
	
	public $age = 19;

	public function __construct(){
		echo 'test init<br/>';
	}
}

然后在配置的components里增加一个组件配置:

'components' => [
	//...略过其它组件的配置
	'test' => [
		'class' => 'app\Test',
		'name' => 'may'
	],
],

调用的测试代码:

echo Yii::$app->test->name; //输出test init 然后再输出了may
echo Yii::$app->test->age; //不再输出test init

通常定义的组件都会继承yii\base\Component,以获得Yii封装的特性来方便地做更多事情

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值