如何在laravel的services.php配置文件中使用函数

4

我需要为socialite使用一个动态回调的URL,因此我在services.php文件中添加了url()函数。它在我的实际服务器上可以正常工作(并且仍然工作)。但是当我尝试在本地启动项目时,会出现以下错误。当我删除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个回答

5
在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']));
    }
}

现在应该可以正常工作。


这应该是被接受的答案。我们可以通过覆盖在“config/”目录下设置的任何配置来使用默认的AppServiceProvider@boot方法,而不是创建新的服务提供者。非常感谢@RainDev。 - Mayeenul Islam

2

这是因为在生产环境中,Laravel缓存了所有配置文件并使用该缓存。而在开发环境中,Laravel没有创建缓存。

您可以通过在配置文件中注释掉url(),然后执行php artisan config:cache命令来检查它。取消注释url()部分,您会发现错误不见了。

在这里,最好的做法是不要在配置文件中使用Laravel或手动定义函数,并找到另一种解决方案来解决您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接