Lying的服务组件其实是一个对象的单例,并且每个单例都对应一个唯一的ID。
> 配置名:`service`,默认配置写在config/service.php中
[TOC]
### 定义一个组件
~~~php
'id' => [
'class' => '组件完整类名', //内置组件可省略
'可配置属性1' => ''
'可配置属性2' => ''
],
~~~
如果服务类没有可配置属性或者想使用默认配置属性,你也可以这样定义:
~~~php
'id' => '组件完整类名',
~~~
这样,你就定义好了一个组件`id`,你可以使用`\Lying::$maker->get('id')`或者`\Lying::$maker->id`来使用一个组件。
### 内置核心组件
Lying内置了一些组件以及组件id,这些内置组件无法更改id对应的class,但是可配置组件的属性,内置组件以及ID如下:
~~~php
'hook' => ['class' => 'lying\service\Hook'],
'request' => ['class' => 'lying\service\Request'],
'router' => ['class' => 'lying\service\Router'],
'cookie' => ['class' => 'lying\service\Cookie'],
'encrypter' => ['class' => 'lying\service\Encrypter'],
'dispatch' => ['class' => 'lying\service\Dispatch'],
'response' => ['class' => 'lying\service\Response'],
'view' => ['class' => 'lying\service\View'],
'session' => ['class' => 'lying\service\Session'],
'helper' => ['class' => 'lying\service\Helper'],
~~~
### 定义相同组件
当然,你可以把某一个服务类设置成两个ID不同的组件(**核心组件除外**),比如两个数据库连接实例:
~~~php
'db1' => [
'class' => 'lying\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=db1;charset=utf8',
'user' => 'root',
'pass' => 'root',
],
'db2' => [
'class' => 'lying\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=db2;charset=utf8',
'user' => 'root',
'pass' => 'root',
],
~~~
然后你就可以使用`\Lying::$maker->get('db1')`和`\Lying::$maker->get('db2')`或者`\Lying::$maker->db1`和`\Lying::$maker->db2`来使用连个不同的数据库连接实例了。
Lying为你准备了一些可重复定义的内置组件:
~~~php
'logger' => ['class' => 'lying\service\Logger'],
'cache' => ['class' => 'lying\cache\FileCache'],
'redis' => ['class' => 'lying\service\Redis'],
'db' => ['class' => 'lying\db\Connection'],
'upload' => ['class' => 'lying\upload\Upload'],
'captcha' => ['class' => 'lying\captcha\Captcha'],
~~~
### 组件工厂
Lying为你提供了一个工厂实例`\Lying::$maker`,你可以使用`\Lying::$maker`来使用你已经定义的或者内置组件,这样做的好处是你的IDE会自动提示你的组件功能,同时也便于组件的调用:
~~~php
\Lying::$maker->hook;
\Lying::$maker->request;
\Lying::$maker->router;
\Lying::$maker->cookie;
\lying::$maker->encrypter;
\Lying::$maker->dispatch;
\Lying::$maker->response;
\Lying::$maker->view;
\Lying::$maker->session;
\Lying::$maker->helper
\Lying::$maker->logger;
\Lying::$maker->cache;
\Lying::$maker->redis;
\Lying::$maker->db;
\Lying::$maker->upload;
\Lying::$maker->captcha;
~~~
对于可重复配置的内置组件,可这样使用不同组件:
~~~php
\Lying::$maker->logger('logger1'); //等同于\Lying::$maker->logger1;
\Lying::$maker->cache('cache1'); //等同于\Lying::$maker->cache1;
\Lying::$maker->redis('redis1'); //等同于\Lying::$maker->redis1;
\Lying::$maker->db('db1'); //等同于\Lying::$maker->db1;
\Lying::$maker->upload('up1'); //等同于\Lying::$maker->up1;
\Lying::$maker->captcha('ca1'); //等同于\Lying::$maker->ca1;
~~~
### 动态注册服务
在程序里,可以动态注册服务组件:
~~~php
\Lying::$maker->register('template', [
'class' => 'lying\cache\FileCache',
'dir' => DIR_RUNTIME . DS . 'compile',
'gc' => 80,
'suffix' => 'php',
'serialize' => false,
]);
~~~
或者:
~~~php
\Lying::$maker->register('template', 'lying\cache\FileCache');
~~~
然后你就可以使用注册的组件了:
~~~php
\Lying::$maker->cache('template');
//或者
\Lying::$maker->template;
~~~
> 注意,已经注册过的组件不会受到影响!!!也不会改变任何配置!!!
- 序言
- 更新日志
- 安装
- 规范
- 常量
- 配置
- 自动加载
- MVC
- 模块
- 控制器
- 模型
- 视图
- php原生模板
- 模板引擎
- 变量输出
- 模板注释
- 模板继承
- 模板引用
- 流程控制
- 原样输出
- 服务组件
- Hook组件
- Request组件
- Router组件
- Cookie组件
- Encrypter组件
- Dispatch组件
- Response组件
- View组件
- Session组件
- Helper组件
- 数据分页
- 数据验证
- Logger组件
- Cache组件
- Redis组件
- Connection组件
- 执行sql语句
- 查询生成器
- 查询方法详解
- Schema
- Captcha组件
- CLI
- CLI工具
- 事件
- 类事件
- 实例事件
- 全局事件
- 助手函数
- 扩展
- 异常
- 部署
- Apache
- Nginx
- IIS
- 虚拟主机