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
- 虛擬主機