【问题标题】:Add your own helpers.php to composer.json将自己的 helpers.php 添加到 composer.json
【发布时间】:2015-10-13 19:20:31
【问题描述】:

关注这个话题Use a custom function everywhere in the website我需要一些帮助来完成已经开始的事情。

所以我在 app 文件夹中创建了一个文件夹:Customs 然后我创建了一个 helpers.php 文件,其中包含以下代码:

<?php
use Illuminate\Support\Str;

if (! function_exists('str_slug')) {
    /**
     * Generate a URL friendly "slug" from a given string.
     *
     * @param  string  $title
     * @param  string  $separator
     * @return string
     */
    function my_slug($title, $separator = '-')
    {
        $title = str_replace('\'','_',$title);
        return Str::slug($title, $separator);
    }
}

我读到我现在必须更新我的 composer.json,尤其是自动加载部分,它基本上是:

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },

我不明白我现在应该做什么...... psr-4 已经说整个 app 文件夹是自动加载的,不是吗?

我也尝试将完整路径放入 helpers.php,但它也不起作用。

我做错了什么?

【问题讨论】:

    标签: laravel laravel-5.1


    【解决方案1】:

    你的自动加载应该是这样的:

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

    files 是您的自定义文件。另外,正如在网站的任何地方使用自定义函数问题中提到的,我建议您使用特征,例如trait StringSluggify。它保持 OOP 方式。

    【讨论】:

    • 谢谢,但我仍有问题:Call to undefined function App\Http\Controllers\my_slug()。我不知道特质是什么......我稍后会看看。
    • @Ennicolem 你如何使用函数my_slug()?是否使用指针$this-&gt;my_slug()
    • 我在做:$input = Request::all(); $publisher = new Publisher([ 'name' =&gt; $input['name'], 'slug' =&gt; my_slug($input['name'],'-') ]); $publisher-&gt;save();
    • 这是不必要的,psr-4 already says that the whole app folder is autoloaded
    • @manix 不,这告诉它只自动加载类。如果您希望任何类之外的函数在任何地方都可用而无需手动包含它,那么您必须将其添加到文件数组中
    【解决方案2】:
    1. app/ 内创建一个名为Helpers 的文件夹。
    2. app/Helpers 内部创建您的自定义类

      namespace App\Helpers;
      
      class FooHelper{
      
          public static function bar(){
              return 'bar';
          }
      }
      
    3. 运行composer dump-autoload 以更新自动加载。

    您现在可以在这里使用您的辅助函数,例如:

    $bar = \App\Helper\FooHelper::bar();
    

    如果您的计划是附加一个facade,那么在config/app.php 中编辑facades 数组,如下所示:

    'Foo' => \App\Helpers\FooHelper::class
    

    现在你可以像这样调用你的函数:

    public function controllerFunction(){
        $bar = \Foo::bar();
    }
    

    【讨论】:

    • 嗨,这很有帮助,但在我的情况下并非如此。好吧,我想......已经有一个关于蛞蝓的课程,我想要改进它。既然 Laravel 提供了函数,为什么不创建一个与 Laravel 95% 相同的新类,我不应该创建一个使用该类的新函数而是添加一个新元素?
    【解决方案3】:

    在您的视图中使用它 {{my_slug($collection->value)}} 或在您的控制器中使用命名空间 App\customs\my_slug($value) 或通过将 use \App\customs 添加到控制器的顶部然后是 my_slug($value)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多