ServiceProvider зарегистрирован, но не работает в контроллере - PullRequest
0 голосов
/ 29 апреля 2020

Я зарегистрировал ServiceProvider с easysms

app \ Providers \ EasySmsServiceProvider. php

<?php
namespace App\Providers;

use Overtrue\EasySms\EasySms;
use Illuminate\Support\ServiceProvider;

class EasySmsServiceProvider extends ServiceProvider{

    public function register(){

        $this->app->singleton(EasySms::class, function($app){
            return new EasySms(config('easysms'));
        });

        $this->app->alias(EasySms::class, 'easysms');
    }
}

Затем я добавляю его в config/app.php в providers

config / app. php

    'providers' => [
        ...
        // easysms
        App\Providers\EasySmsServiceProvider::class,
    ],

Я уже проверил bootstrap/cache/services.php и я уверен, что зарегистрировал его успешно.

bootstrap/cache/services.php details

Но когда я пытаюсь использовать его в Controller, произошли ошибки, кажется, что-то не так с EasySmsServiceProvider errors in postman

вот мой контроллер

app \ Http \ Controllers \ V1 \ Auth \ VerifySmsesController. php

<?php
namespace App\Http\Controllers\V1\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\V1\Auth\VerifySmsRequest;
use Overtrue\EasySms\EasySms;
use Illuminate\Support\Str;
use Cache;

class VerifySmsesController extends Controller{

    public function store(VerifySmsRequest $request, EasySms $easySms){

        $phone = $request->phone;
        $code = str_pad(random_int(1, 999999), 6, 0, STR_PAD_LEFT);

        try {
            $result = $easySms->send($phone, [
                'template' => config('easysms.gateways.aliyun.templates.register'),
                'data' => [
                    'code' => $code
                ],
            ]);
        } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
            $message = $exception->getException('aliyun')->getMessage();
            abort(500, $message ?: 'Errors In Sending SMS');
        }

        $key = 'verify_code_' . Str::random(15);
        $expiredAt = now()->addMinutes(5);
        Cache::put($key, ['phone' => $phone, 'code' => $code], $expiredAt);
        return response()->json([
            'key' => $key,
            'expired_at' => strtotime($expiredAt->toDateTimeString()),
        ],201);
    }
}

вот мой routes/api.php

<?php 
Route::group([
    'prefix' => 'v1',
    'name' => 'v1.',
    'namespace' => 'V1'
], function(){

    Route::group([
        'prefix' => 'auth',
        'name' => 'auth.',
        'namespace' => 'Auth',
        'middleware' => ['throttle:'.config('api.rate_limits.sign')]
    ], function(){

        Route::resource('verify-smses', 'VerifySmsesController', ['only' => ['store']]);
    });
});

Мне пришлось попробовать команды ниже, чтобы очистить / сбросить мой конфиг, но ничего не помогает

php artisan config:clear
php artisan clear-compiled
composer dump-autoload
php artisan optimize

также, когда Я пытаюсь использовать $result = app('easysms')->send(...) вместо $result = $easySms->send(...) выше

enter image description here

все еще ошибки

Я использую Laravel 7.8. 1.

Как я могу исправить эти ошибки? Большое спасибо ~

--- обновление ---

config / easysms. php

<?php 
use \Overtrue\EasySms\Strategies\OrderStrategy;
return [
    'timeout' => 10.0,
    'default' => [
        'strategy' => OrderStrategy::class,
        'gateways' => [
            'aliyun',
        ],
    ],
    'gateways' => [
        'errorlog' => [
            'file' => '/tmp/easy-sms.log',
        ],
        'aliyun' => [
            'access_key_id' => env('SMS_ALIYUN_SMS_ACCESS_KEY_ID'),
            'access_key_secret' => env('SMS_ALIYUN_SMS_ACCESS_KEY_SECRET'),
            'sign_name' => env('SMS_ALIYUN_SMS_SIGN_NAME'),
            'templates' => [
                'register' => env('SMS_ALIYUN_SMS_TEMPLATE_REGISTER')
            ]
        ],
    ],
];

--- обновление ---

работает, когда я запускаю код ниже в php artisan tinker напрямую

$sms = app('easysms');
try {
    $sms->send($phone, [
         'template' => config('easysms.gateways.aliyun.templates.register'),
         'data' => [
             'code' => 1234
         ],
    ]);
} catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
    $message = $exception->getException('aliyun')->getMessage();
    dd($message);
}
...