最近在搞着一个项目,用的就是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); } }
分享:
0 条评论