我想创建帮助函数,以避免在Laravel视图之间重复代码。例如:

view.blade.php

<p>Foo Formated text: {{ fooFormatText($text) }}</p>

它们基本上是文本格式化函数。我应该如何定义全局可用的帮助函数,如fooFormatText()?


当前回答

**

地位的助手

** 创建新助手

<?php

namespace App\Helpers;

use Illuminate\Database\Eloquent\Collection;

class StatusHelper
{
 protected static $_status = [
        1=> [
            'value' => 1,
            'displayName' => 'Active',
        ],
        2 => [
            'value' => 2,
            'displayName' => 'Inactive',
        ],
        3 => [
            'value' => 3,
            'displayName' => 'Delete',
        ],

    ];

     public static function getStatusesList()
    {
        $status = (new Collection(self::$_status))->pluck('displayName', 'value')->toArray();


        return $status;
    }
}

用于控制器和任何视图文件

use App\Helpers\StatusHelper;

class ExampleController extends Controller
{
        public function index()
        {
            $statusList = StatusHelper::getStatusesList();

            return view('example.index', compact('statusList'));
        }
}

其他回答

Laravel 5自定义刀片指令

是的,还有另一种方法!

第一步:注册一个自定义Blade指令:

<?php // code in app/Providers/AppServiceProvider.php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Blade; // <-- This is important! Without it you'll get an exception.

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
     public function boot()
     {
         // Make a custom blade directive:
         Blade::directive('shout', function ($string) {
             return trim(strtoupper($string), '(\'\')');
         });

         // And another one for good measure:
         Blade::directive('customLink', function () {
             return '<a href="#">Custom Link</a>';
         });
     }
    ...

步骤2:使用自定义Blade指令:

<!-- // code in resources/views/view.blade.php -->

@shout('this is my custom blade directive!!')
<br />
@customLink

输出:

这是我的自定义刀片指令!! 自定义链接


来源:https://laravel.com/docs/5.1/blade extending-blade

附加阅读:https://mattstauffer.co/blog/custom-conditionals-with-laravels-blade-directives


如果您想学习如何最好地创建可以在任何地方使用的自定义类,请参阅Laravel 5中的自定义类,简单方法

不需要包含您的自定义helper类,实际上可以在别名下添加到config/app.php文件中。

应该是这样的。

 'aliases' => [ 
    ...
    ...
    'Helper' => App\Http\Services\Helper::class,
 ]

然后到你的控制器,使用'use Helper'方法包括Helper,这样你就可以简单地在你的Helper类上调用一些方法。

eg. Helper::some_function();

或者在资源视图中,您可以直接调用Helper类。

eg. {{Helper::foo()}}

但这仍然是开发人员应该遵循的编码风格。我们可能有不同的解决问题的方法,我也想把我的方法分享给初学者。

首先在App\Http目录中创建helpers.php。 然后在composer.json中添加以下代码

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

执行如下命令

composer dump-autoload

现在可以在helpers.php文件中定义自定义函数。

**

地位的助手

** 创建新助手

<?php

namespace App\Helpers;

use Illuminate\Database\Eloquent\Collection;

class StatusHelper
{
 protected static $_status = [
        1=> [
            'value' => 1,
            'displayName' => 'Active',
        ],
        2 => [
            'value' => 2,
            'displayName' => 'Inactive',
        ],
        3 => [
            'value' => 3,
            'displayName' => 'Delete',
        ],

    ];

     public static function getStatusesList()
    {
        $status = (new Collection(self::$_status))->pluck('displayName', 'value')->toArray();


        return $status;
    }
}

用于控制器和任何视图文件

use App\Helpers\StatusHelper;

class ExampleController extends Controller
{
        public function index()
        {
            $statusList = StatusHelper::getStatusesList();

            return view('example.index', compact('statusList'));
        }
}

在dir bootstrap\autoload.php中

require __DIR__.'/../vendor/autoload.php';
require __DIR__.'/../app/Helpers/function.php'; //add

添加这个文件

app\Helpers\function.php