【问题标题】:How can I write an accessible class in the whole of project?如何在整个项目中编写一个可访问的类?
【发布时间】:2017-04-28 10:40:15
【问题描述】:

我使用 Laravel 框架,这是我当前的目录:

如您所见,有一个名为Log 的类(我选择的那个)。现在我需要让它全球化。我的意思是我想让它在任何地方都可以访问,并且能够在以下文件中创建一个对象 (instance)

  • classe文件夹的所有文件
  • 所有控制器
  • web.php文件的
  • 所有视图文件

无论如何,我希望能够对其进行实例化并像这样在任何地方调用它的方法:

$obj = new Log();
$obj->insert($message);

我该怎么做?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你可以create global Laravel helper:

    if (! function_exists('log')) {
        function log($message)
        {
            (new Log)->insert($message);
        }
    }
    

    将其放入helpers.php 并将其添加到composer.json 以加载帮助文件:

    "autoload": {
        ....
        "files": [
            "app/someFolder/helpers.php"
        ]
    },
    

    然后你就可以全局使用这个助手了:

    log('User added');
    

    在视图中:

    {{ log('User added') }}
    

    更新

    @stack,您使用错误的 JSON 语法(cmets 中的屏幕截图),这是正确的:

    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "app/Helpers/helpers.php"
        ]
    },
    

    【讨论】:

    • 似乎是正确的,谢谢,点赞 .. 仅供参考,我不能通过制作 Facades 来做到这一点吗?
    • @stack Facades 是用于静态方法的,如果你想要一个实例,facade 不适合你的情况。
    • 可以,但是对于这种情况,使用全局帮助器更加健壮且更易于使用。
    • 您能告诉我您的解决方案与您提供的链接中的其他解决方案有什么区别吗?你们两个都用过助手,对吧?那么有什么不同呢?
    • 哦,抱歉,我现在明白了。我的解决方案使用作曲家加载文件。另一种解决方案是手动加载一堆文件。
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2014-03-18
    相关资源
    最近更新 更多