Как использовать функции в файле конфигурации services.php laravel

Мне нужно было использовать динамический обратный вызов URL для светской львицы, поэтому я добавил url() Функция к моему файлу services.php работала нормально (и все еще работает на моем живом сервере), но при попытке запустить проект локально я получаю следующую ошибку. Когда я удаляю url() Метод все работает отлично, пожалуйста, помогите.

PHP Fatal error:  Uncaught ReflectionException: Class log does not exist in /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Container/Container.php:734
Stack trace:
#0 /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Container/Container.php(734): ReflectionClass->__construct('log')
#1 /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Container/Container.php(629): Illuminate\Container\Container->build('log', Array)
#2 /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(697): Illuminate\Container\Container->make('log', Array)
#3 /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Container/Container.php(849): Illuminate\Foundation\Application->make('log')
#4 /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Container/Container.php(804): Illuminate\Container\Container->resolveClass(Object(ReflectionParameter))
#5 /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Container/Container.php(7 in /home/fenn/projects/jokwit/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 734

Вот мой файл services.php

<?php

return [

/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Stripe, Mailgun, Mandrill, and others. This file provides a sane
| default location for this type of information, allowing packages
| to have a conventional place to find your various credentials.
|
*/

'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
],

'mandrill' => [
'secret' => env('MANDRILL_SECRET'),
],

'ses' => [
'key'    => env('SES_KEY'),
'secret' => env('SES_SECRET'),
'region' => 'us-east-1',
],

'stripe' => [
'model'  => App\User::class,
'key'    => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
],

'facebook' => [
'client_id' => '1700935300171729',
'client_secret' => 'XXXXXXXXXXXXXXXXXXX',
'redirect' => url('/facebook/callback'),
],'google' => [
'client_id'     => 'XXXXXXXXXXXXXXXXXXXXXXXX',
'client_secret' => 'XXXXXXXXXXXXXXXXXXXXXXXX',
'redirect'      => url('google/callback'),
],];

2

Решение

Это не работает, потому что в производстве Laravel кэшировал все файлы конфигурации и использовал этот кеш. В среде разработки Laravel не создавал кеш.

Вы можете проверить это, комментируя url() в конфиге, а затем работает php artisan config:cache команда. Раскоментируйте url() часть, и вы увидите, что ошибка исчезла.

Лучшее, что вы можете здесь сделать, это не использовать Laravel или определенные вручную функции в файлах конфигурации и найти другое решение для вашей проблемы.

2

Другие решения

В файле services.php

...
'redirect'      => 'google/callback',
...

Затем создайте поставщика услуг, например ConfigServiceProvider

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ConfigServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}

/**
* Register the application services.
*
* @return void
*/
public function register()
{
\Config::set("services.google.redirect", url(\Config::get('services')['google']['redirect']));
}
}

теперь должно работать нормально

2

По вопросам рекламы [email protected]