最近在搞着一个项目,用的就是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 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注