【问题标题】:making a helper like laravel defaullt request helper制作像 laravel 默认请求助手这样的助手
【发布时间】:2021-03-07 01:26:15
【问题描述】:

我想制作一个我在项目中广泛使用的辅助函数,几乎可以在任何地方或其他一些现在可能用作示例的辅助函数中使用,如下所示:

request()->get('name);

现在我知道刀片或控制器或其他地方的任何地方,如果我使用它,它都可以工作。 现在我有 2 个问题。 1-如何制作这样的助手,可以做某事并且可以轻松广泛地使用 2-做这样的帮手是明智的吗???

【问题讨论】:

  • 1) 这是 Laravel 助手的 source code,它应该给你一个很好的起点。 2) 辅助函数非常有用,并且在整个 Laravel 框架中被广泛使用,所以我认为在适当的时候使用它们是明智的。

标签: php laravel


【解决方案1】:

要制作全局助手,你可以这样做。

添加一个php文件(不是class)到下面的路径app/Helpers/helper.php

if (! function_exists('helper')) {
    function helper() {
        return new Helper();
    }
}

为了使它类似于Laravels,方法是让一个你可以调用方法的对象在初始助手调用时返回。

class Helper {
    public function getHelp() {
        return 'did this help?';
    }
}

现在让 composer 使用辅助函数自动加载您的文件。

"autoload": {
    "files": [
        "app/Helpers/helper.php"
    ]
}

这将使您能够调用以下内容。

helper()->getHelp(); // returns: did this help?

关于你的最后一个问题。

做这样的帮手是明智之举吗?

在面向对象的设计中,这是一种反模式,因为它处理全局函数并且应该是静态命名空间调用或对象。然而,在Laravel 的上下文中,我真的很喜欢你可以用这些助手做的事情,现在,在我当前的项目中,我们有处理格式化浮点数到我们的语言环境货币字符串表示的全局函数,这有很大帮助并且非常令人愉快使用。

【讨论】:

  • 谢谢你真的帮了很多忙,但其他人也得到了回答我认为必须对此进行更多研究:)
  • 这是两种不同的方法,都是正确的,最重要的只是学习新事物并变得更好:)
  • 实际上这个答案更符合如何制作像request()这样的辅助函数的问题。我的方法略有不同,更符合 Laravel 的辅助类,例如StrArrlaravel.com/docs/8.x/helpers 两种方法都应该可以正常工作并且几乎可以互换。不确定是否会影响性能?
  • 在不知道确切的情况下,我无法想象这些解决方案中的任何一个,都会影响现实生活场景中的性能。其他人会避免使用 Str:: 方法。并且函数解决方案尽可能简单。
【解决方案2】:

app\Helpers\GlobalHelper.php中创建一个帮助类

<?php


namespace App\Helpers;


class GlobalHelper
{
    public static function helloWorld()
    {
        return "Hello World"
    }
}

然后在你的 config\app.php 的别名数组中添加

'Helper' =&gt; App\Helpers\GlobalHelper::class,

然后在刀片文件中您可以使用{{ Helper::helloWorld() }} 或在控制器中您可以使用\Helper::helloWorld();

【讨论】:

  • 其实没想到这个办法不错!
猜你喜欢
  • 2020-04-19
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
相关资源
最近更新 更多