技术
Lumen 框架添加组件
最近在搞着一个项目,用的就是Lumen框架,因为刚上手没多久,使用上还有些小问题,最近需要添加一个短信验证码发送的组件,遇到一些问题,几经折腾,现在就来总结一下。
首先在app路径下新建了个文件夹(Utilities)用于放置自己后期需要添加的服务或者组件,目录结构如下
在写好了发送服务的代码之后,发现这个文件在别的文件中引入时会找不到命名空间,查阅资料之后发现需要在composer.json中进行修改,添加自定义的命名空间。
"autoload-dev": {
"classmap": [
"tests/",
"database/",
"app/Utilities"
]
},
#在autoload中添加自定的命名空间
#随后要在项目根目录下运行composer dump-autoload即可
在编写完新的组件之后,为了接下来能方便的调用,所以希望能通过Facades对新的组件进行调用,所以需要先将新添加的组件绑定到服务容器中,故添加一个Service Provider进行组件的注册。以下为示例代码:
App/Utilities/SmsSend.php:
<?php
namespace App\Utilities;
class SmsSend {
public function send($phone) {
......
}
}
App/Utilities/SmsSendFacade.php:
<?php
namespace App\Utilities;
use Illuminate\Support\Facades\Facade;
class SmsSendFacade extends Facade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() {
return 'sms';
}
}
App/Provider/SmsSendServiceProvider.php:
<?php
namespace App\Providers;
use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
use App\Utilities\SmsSend;
use App\Utilities\SmsSendFacade;
class SmsSendServiceProvider extends ServiceProvider {
public function register() {
$this->app->bind('sms',SmsSend::class);
class_alias(SmsSendFacade::class, 'sms');
}
}
这样,在需要调用到该组件的文件中,便可以简单的调用了。
<?php
namespace App\Http\Controllers;
use Laravel\Lumen\Routing\Controller as BaseController;
use sms;
class ApiController extends BaseController {
public function test() {
$phone = '13xxxxxxxxx';
sms::send($phone);
}
}
分享: