创建自定义助手类?

Posted

技术标签:

【中文标题】创建自定义助手类?【英文标题】:Creating custom helper class? 【发布时间】:2015-10-20 04:17:15 【问题描述】:

我关注了 What is the best practice to create a custom helper function in php Laravel 5?

这个问题的两个答案帮助我在 laravel 5.1 中创建自定义静态类。现在我的问题是该类是否安全?因为它是一个静态类。 提前谢谢你。

【问题讨论】:

“安全”是什么意思?什么是“静态类”? @jedrzej.kurylo .我是 laravel 的新手。我创建了一个辅助类。它具有静态方法。ststic 方法是否安全。我的意思是安全问题。 @jedrzej.kurylo 感谢您的评论。 不,就安全性而言,静态方法没有什么不好的。 @jedrzej.kurylo。谢谢你的澄清 【参考方案1】:

在帮助程序类中使用静态方法与保护您的应用程序无关。

问题是我们为什么还要使用辅助类/方法以及什么是辅助类/方法:

Laravel 有许多 helper 方法,它们可以帮助您减少编写大量常见任务的代码:

这个帮助类文件位于这里:

vendor\laravel\framework\src\Illuminate\Foundation\helpers.php

这些是 Laravel 开箱即用的一些辅助方法:

abort - 使用给定数据抛出 HttpException。

if (!function_exists('abort')) 
    /**
     * Throw an HttpException with the given data.
     *
     * @param  int     $code
     * @param  string  $message
     * @param  array   $headers
     * @return void
     *
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
     * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
     */
    function abort($code, $message = '', array $headers = [])
    
        return app()->abort($code, $message, $headers);
    

asset - 为应用程序生成资产路径。

if (!function_exists('asset')) 
    /**
     * Generate an asset path for the application.
     *
     * @param  string  $path
     * @param  bool    $secure
     * @return string
     */
    function asset($path, $secure = null)
    
        return app('url')->asset($path, $secure);
    

还有更多...

所以你希望拥有自己的 Helper 方法,可能是因为它目前在 Laravel Helpers 中不可用。

为避免覆盖 Laravel 辅助方法,最好将自己的辅助方法放在类文件中

示例:我可以在我的应用程序中重用的 Dates 助手类,可能如下所示:

namespace App\Helpers;

class DateHelper 

    public static function dateFormat1($date) 
        if ($date) 
            $dt = new DateTime($date);

        return $dt->format("m/d/y"); // 10/27/2014
      
   

那么你可以像这样使用它:

dateHelper::dateFormat1($user->created_at)

如果我们不想使用类,我们可以这样做:

//helper method for date
function dateFormat1($date) 
            if ($date) 
                $dt = new DateTime($date);

            return $dt->format("m/d/y"); // 10/27/2014
          
       

并像这样使用它:

dateFormat1($user->created_at)

但是,如果 Laravel 的后续版本决定使用同名的 hepler dateFormat1 那么将会发生冲突或覆盖。

因此最好将辅助方法放在类中。

【讨论】:

【参考方案2】:

我认为您可以按照指定的方式进行操作。这种方法没有任何问题。我正在使用它,没有问题。

【讨论】:

【参考方案3】:

您可以按照以下简单步骤在Laravel 5.x创建Helper

第一步

app/Helpers 目录中创建新的helper_name.php 文件 前任。我以这种方式创建了DemoHelper.php app/Helpers/DemoHelper.php

第 2 步

将创建的Helper(DemoHelper.php)的条目添加到composer.json文件的autoload部分

"autoload": 
 "files": [
     "app/Helpers/Helper.php",
     "app/Helpers/DemoHelper.php"
 ]
,

第 3 步

最后,composer dump-autoload 在终端中点击此命令。

【讨论】:

我想你错过了这个问题。 嗨@Don't Panic,编写无类助手的最佳方法,在助手中编写类和导入类是不好的做法。因此,您可以将简单的正常重复使用的计算/逻辑功能放入助手中。对于此要求,您可以使用特征,这是一种很好的做法。 OP 包含一个指向问题的链接,显示他如何创建他的助手。您的回答只是重复了另一个问题中的内容。所以你正在向他展示如何做他已经做过的事情。但我评论的重点是,这甚至不是 OP 所要求的(显然 - 他已经做到了)。

以上是关于创建自定义助手类?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI Draggable 的自定义助手

如何在车把 ember 中定义自定义助手

如何将模型传递给剃须刀页面自定义助手

如何从 ViewStart 中访问(自定义)Web 助手?

ember 模板找不到我的自定义助手

如何在自定义助手中访问排毒元素匹配器?