【问题标题】:Use static variables in Laravel Facades在 Laravel Facades 中使用静态变量
【发布时间】:2023-04-08 19:23:01
【问题描述】:

我有一个 Facade(在本例中是一个单例),我使用 ServiceProvider 注册它:

服务提供商

use App;

class FacilityServiceProvider extends ServiceProvider 
{

    public function register()
    {  
        $this->app->singleton('Facility', function(){
            return new Facility();
        });

        // Shortcut so developers don't need to add an Alias in app/config/app.php
        $this->app->booting(function()
        {
            $loader = \Illuminate\Foundation\AliasLoader::getInstance();
            $loader->alias('Facility', 'CLG\Facility\Facades\FacilityFacade');
        });
    }
}

立面

use Illuminate\Support\Facades\Facade;

class FacilityFacade extends Facade {

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'Facility'; }
}

现在,我想在 Facility 类中包含静态变量:

Facility.php

class Facility
{
    public static $MODEL_NOT_FOUND = '-1';

    public function __construct() { ... }
}

但是当我使用Facility::$MODEL_NOT_FOUND 时,我得到Access to undeclared static property

我做错了什么?

【问题讨论】:

    标签: php laravel laravel-4 laravel-facade


    【解决方案1】:

    这是因为 Facade 类仅将方法调用“重定向”到底层类。所以你不能直接访问属性。最简单的解决方案是使用 getter 方法。

    class Facility
    {
        public static $MODEL_NOT_FOUND = '-1';
    
        public function __construct() { ... }
    
        public function getModelNotFound(){
            return self::$MODEL_NOT_FOUND;
        }
    }
    

    另一种方法是编写您自己的从Illuminate\Support\Facades\Facade 扩展的外观类,并使用magic methods 直接访问属性

    【讨论】:

    • 是的,我也这么认为。那时我不喜欢的是我必须将其称为函数,而不是变量(即Facility::getModelNotFound() 而不是Facility::$ModelNotFound 或任何名称)。你有什么推荐的?
    • 你不会绕过 Laravel 的 Facade 类调用函数。但是正如我提到的。你可以自己写。给我一些时间......我会写一个并更新答案。
    • 哦,好吧......我认为像__getStatic() 这样的东西是可能的,但显然没有这样的东西。您必须使用方法或根本没有 Facade:/
    • 哈哈,好的,谢谢。我想我被函数名卡住了
    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 2017-05-13
    • 2011-01-29
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多