Laravel组织帮助功能

问题描述 投票:2回答:3

[请不要在答案中与技术人员交谈:-D我不是硬核程序员。

在Laravel中存储某些功能的好方法是什么?我有仅适用于“帖子”或“媒体”的函数,例如getAttributeList或getComponents。我之所以说“发布”和“媒体”,是因为它们都有自己的控制器,模型和视图。将其放入模型中感觉不对,因为那应该是数据库的东西吧?而且特征更多是遍布各地的重复功能,对吗?因此,现在我有一个大文件,名为Helpers.php。嗯,它越来越大...我应该在PostHelpers.php,MediaHelpers.php等中将其分开吗?还是Laravel中有更优雅的方法?

php laravel
3个回答
0
投票

在您的作曲家json文件中检查此代码段

"autoload": {
        "files": [
                "app/Helpers/global_helper.php"
            ],

如您所见,我已经在名为Helpers的文件夹中自动加载了一个名为global_helper.php的单个文件。在此文件中,我有一个名为loadHelper(...$files)的函数。此功能的作用是

if (!function_exists('loadHelper')) {
    function loadHelper(...$file_names)
    {
        foreach ($file_names as $file) {
            include_once __DIR__ . '/' . $file . '_helper.php';
        }
    }
}

您可以将文件名作为数组或字符串传递,它将包括那些文件到您的Controller构造函数中

因此,在我的控制器中,每当我需要一些辅助功能时,我都会为该控制器创建一个安全的辅助文件,然后在构造函数中必须将其包括在内。

我不确定是否有更好的解决方案,但到目前为止,这是我制作所有项目的方式。

我希望这会对您有所帮助;)


0
投票

在OOP编程语言中,在逻辑块中分离代码的一种好方法是使用组合。组合是两个类之间的关联,对于要实例化的第一类实例,必须为其提供第二类。

class Media
{
}

class Post
{
    private $media;
    public function __construct(Media $media)
    {
       $this->media = $media;
    }
}

$post = new Post(new Media);

您可以将其与interfaceabstract类结合使用,以实现更可靠的实现。通常不建议使用Traits


0
投票

非常简单:只需在您的应用的根目录下检查您的composer.json文件。并在自动加载部分下添加:

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

“ files”:[“ app / helper.php”],这是您需要在ur composer文件中添加并提供file路径的行。就我而言,我在App目录中创建了一个文件helper.php,其中保留了所有功能。在此之后运行以下命令:composer dump-autoload

现在您可以在任何地方访问您的功能。

© www.soinside.com 2019 - 2024. All rights reserved.