企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Lying可以让你随心所欲的加载第三方类,甚至是让你扩展一个Lying的服务组件。 [TOC] ### 单类、多类加载 如果你有一个文件,里面有一个类或者多个类,那么你可以这样加载到Lying: ~~~php 'classMap' => [ //完整类名 => 类文件绝对路径 'PHPExcel' => ROOT . '/Excel/PHPExcel.php', ], ~~~ ### PSR4加载 如果你有一个扩展类集,并且符合PSR4标准,那么你可以用PSR4标准来加载类: ~~~php 'psr-4' => [ //命名空间前缀 => 路径 //路径可以是一个数组,参见 http://www.php-fig.org/psr/psr-4/examples/ 'module' => DIR_MODULE, ], ~~~ ### PSR0加载 如果你手上有一个第三方类库,但是很不幸它只符合PSR0规范,那么你就可以用PSR0来加载它: ~~~php 'psr-0' => [ //根目录列表,参见 https://gist.github.com/jwage/221634 ROOT . '/extend' ], ~~~ ### composer加载 如果你习惯使用composer,那么你可以用composer来加载你所需的扩展类: ~~~php "require":{ "php": ">=5.5.0", "ext-pdo": "*", //你需要的扩展 } ~~~ 定义完你需要加载的类后,执行`composer install`。到这边,你会看到Lying目录下多了一个`vendor`目录,这个就是composer的目录,现在就可以使用第三方类啦。 ### 扩展服务类 如果你想像Lying的组件一样,扩展一个自己的组件: * 在框架根目录创建一个文件夹,例如:`extend`。 * 定义一个服务类,文件名为`MyExt.php`并且放在`extend`目录下,加载方式为PSR4: ~~~php 'psr-4' => [ 'module' => DIR_MODULE, 'extend' => ROOT . '/extend' ], ~~~ * 定义服务类`MyExt` ~~~ <?php namespace extend; use lying\service\Service; class MyExt extends Service { private $show; protected $name; protected $message; protected function init() { $this->show = $this->name . $this->message; } public function show() { return $this->show; } } ~~~ 这样一个服务类就定义好了,现在画一下重点: > 1. 可配置属性应设置为`protected`或者`public`,上面定义了两个可配置属性`name`和`message`,一个不可配置属性`show`。 > 2. 上面定义了一个`protected`方法`init()`。这个方法就相当于服务类的构造函数了,因为你不能在服务类定义真正的构造函数,你可以在这个方法中做一些你想在构造函数做的事情。`init`方法不是必须的。 > 3. 上面定义了一个公开方法`show()`,这个就是你服务类可调用的方法了。 * 配置服务类 现在你可以在配置文件`service.php`中配置你的服务类: ~~~php 'me' => [ 'class' => 'extend\MyExt', 'name' => 'lying', 'message' => 'hello', ], ~~~ 如上:配置服务类`extend\MyExt`的ID为`me`,并且设置两个可配置属性`name`和`message`。 * 使用服务类 ~~~php $m = \Lying::$maker->get('me'); //或者 $m = \Lying::$maker->me; //或者 $m = \Lying::$maker->me(); //调用方法 echo $m->show(); ~~~ 你可以看到输出了`lyinghello`。 > 到此为止,一个自定义的服务类就完成啦。