Я зарегистрировал 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](https://i.stack.imgur.com/q3TLn.png)
Но когда я пытаюсь использовать его в Controller
, произошли ошибки, кажется, что-то не так с EasySmsServiceProvider
![errors in postman](https://i.stack.imgur.com/cFZTM.png)
вот мой контроллер
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](https://i.stack.imgur.com/tjz98.png)
все еще ошибки
Я использую 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);
}