我想创建帮助函数,以避免在Laravel视图之间重复代码。例如:
view.blade.php
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
它们基本上是文本格式化函数。我应该如何定义全局可用的帮助函数,如fooFormatText()?
我想创建帮助函数,以避免在Laravel视图之间重复代码。例如:
view.blade.php
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
它们基本上是文本格式化函数。我应该如何定义全局可用的帮助函数,如fooFormatText()?
当前回答
在App/Helpers/中创建新文件examplehelper.php 然后加入作曲家。json文件
"autoload": { "classmap": [ "database"], "psr-4": { "App\\": "app/" },
"files": ["helpers/examplehelper.php" ]},
其他回答
在SO和谷歌上筛选了各种各样的答案后,我仍然没有找到一个最佳的方法。大多数答案建议我们离开应用程序,依靠第三方工具Composer来完成工作,但我不相信仅仅为了包含一个文件而耦合到一个工具是明智的。
Andrew Brown的回答最接近我认为应该如何处理它,但是(至少在5.1中),服务提供者步骤是不必要的。Heisian的回答强调了PSR-4的使用,这让我们更接近了一步。下面是视图中helper的最终实现:
首先,在你的app目录中创建一个helper文件,命名空间为:
namespace App\Helpers;
class BobFinder
{
static function bob()
{
return '<strong>Bob?! Is that you?!</strong>';
}
}
接下来,在config\app.php中,在aliases数组中为你的类添加别名:
'aliases' => [
// Other aliases
'BobFinder' => App\Helpers\BobFinder::class
]
这就是你需要做的。PSR-4和别名应该向你的视图公开helper,所以在你的视图中,如果你输入:
{!! BobFinder::bob() !!}
它应该输出:
<strong>Bob?! Is that you?!</strong>
这里有一些很好的答案,但我认为这是最简单的。 在Laravel 5.4(以及之前的版本)中,你可以在方便的地方创建一个类,比如App/Libraries/Helper.php
class Helper() {
public function uppercasePara($str) {
return '<p>' .strtoupper($str). '<p>;
}
}
然后你可以像这样简单地在你的Blade模板中调用它:
@inject('helper', \App\Libraries\Helper)
{{ $helper->drawTimeSelector() }}
如果你不想使用@inject,那么就把'uppercasePara'函数设置为静态的,并像这样将调用嵌入到你的Blade模板中:
{{ \App\Libraries\Helper::drawTimeSelector() }}
不需要别名。Laravel自动解析具体类。
Laravel 5中的自定义类,简单的方法
这个答案适用于Laravel中的一般自定义类。有关更多Blade的具体答案,请参阅Laravel 5中的自定义Blade指令。
步骤1:创建您的Helpers(或其他自定义类)文件,并给它一个匹配的名称空间。编写你的类和方法:
<?php // Code within app\Helpers\Helper.php
namespace App\Helpers;
class Helper
{
public static function shout(string $string)
{
return strtoupper($string);
}
}
步骤2:创建别名:
<?php // Code within config/app.php
'aliases' => [
...
'Helper' => App\Helpers\Helper::class,
...
步骤3:在项目根目录下运行composer dump-autoload
第四步:在你的Blade模板中使用它:
<!-- Code within resources/views/template.blade.php -->
{!! Helper::shout('this is how to use autoloading correctly!!') !!}
额外学分:在你的Laravel应用程序的任何地方使用这个类:
<?php // Code within app/Http/Controllers/SomeController.php
namespace App\Http\Controllers;
use Helper;
class SomeController extends Controller
{
public function __construct()
{
Helper::shout('now i\'m using my helper class in a controller!!');
}
...
来源:http://www.php-fig.org/psr/psr-4/
为什么它可以工作:https://github.com/laravel/framework/blob/master/src/Illuminate/Support/ClassLoader.php
自动装填的来源: http://php.net/manual/en/language.oop5.autoload.php
不需要包含您的自定义helper类,实际上可以在别名下添加到config/app.php文件中。
应该是这样的。
'aliases' => [
...
...
'Helper' => App\Http\Services\Helper::class,
]
然后到你的控制器,使用'use Helper'方法包括Helper,这样你就可以简单地在你的Helper类上调用一些方法。
eg. Helper::some_function();
或者在资源视图中,您可以直接调用Helper类。
eg. {{Helper::foo()}}
但这仍然是开发人员应该遵循的编码风格。我们可能有不同的解决问题的方法,我也想把我的方法分享给初学者。
编写自定义helper的最佳实践是
1)在项目根目录的app目录中,创建一个名为Helpers的文件夹(只是为了分离和构造代码)。
2)在文件夹中写入psr-4文件或普通php文件
如果PHP文件的格式是psr-4,那么它将被自动加载,否则在编写器中添加以下行。Json,在项目根目录中
在autoload key中,创建一个名为files的新key来在自动加载时加载文件,在files对象中添加从app目录开始的路径。这里有一个例子。
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Helpers/customHelpers.php"
]
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
PS:如果文件没有加载,尝试运行composer dump-autoload。