我想创建辅助函数,以避免在Laravel 5的视图之间重复代码:
view.blade.php
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
它们基本上是文本格式化功能。我在哪里以及如何使用这些功能创建文件?
我想创建辅助函数,以避免在Laravel 5的视图之间重复代码:
view.blade.php
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
它们基本上是文本格式化功能。我在哪里以及如何使用这些功能创建文件?
Answers:
helpers.php
在您的应用文件夹中创建一个文件,并使用composer加载它:
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helpers.php" // <---- ADD THIS
]
},
将其添加到composer.json
文件后,运行以下命令:
composer dump-autoload
如果您不喜欢将helpers.php
文件保留在app
目录中(因为它不是PSR-4命名空间的类文件),则可以执行laravel.com
网站的操作:将存放helpers.php
在bootstrap目录中。记住在composer.json
文件中进行设置:
"files": [
"bootstrap/helpers.php"
]
此答案适用于Laravel中的常规自定义类。有关特定于刀片的更多答案,请参见Laravel 5中的“自定义刀片指令”。
步骤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
在项目根目录中运行
步骤4:在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
aliases
数组下添加类app/config.php
:'Helper' => App\Helpers\Helper::class,
然后您就可以Helper::prettyJson();
在Blade中调用它了。
我最初的想法也是作曲家自动加载,但对我来说Laravel 5ish并不太好。L5大量使用服务提供者,它们是引导您的应用程序的动力。
首先,我在目录中创建了一个app
名为的文件夹Helpers
。然后,在Helpers
文件夹中添加了要添加功能的文件。拥有包含多个文件的文件夹可以使我们避免一个大文件变得太长且难以管理。
接下来,我HelperServiceProvider.php
通过运行artisan命令创建了一个:
artisan make:provider HelperServiceProvider
在register
方法中,我添加了此代码段
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
require_once($filename);
}
}
最后config/app.php
在providers数组中注册您的服务提供商
'providers' => [
'App\Providers\HelperServiceProvider',
]
现在,Helpers
目录中的所有文件都已加载,可以使用了。
更新2016-02-22
这里有很多不错的选择,但是如果我的回答对您有用,我会继续前进,并制定了一种包括帮助者的方法。您可以使用该软件包来获取灵感,也可以随时通过Composer下载该软件包。它具有一些我经常使用的内置助手(但默认情况下都是不活动的),并允许您使用简单的Artisan生成器制作自己的自定义助手。它还解决了一个响应者关于使用映射器的建议,并允许您显式定义要加载的自定义帮助程序,或者默认情况下自动将所有PHP文件加载到helper目录中。反馈和PR非常感谢!
composer require browner12/helpers
Github:Browner12 /助手
start.php
文件(虽然不好,但是暂时达到了目的)。您对加载多个文件还有其他建议吗?
这是JeffreyWay
本《Laracasts讨论》中所建议的。
app/Http
目录中,创建一个helpers.php
文件并添加您的功能。composer.json
,在该autoload
块,添加"files": ["app/Http/helpers.php"]
。composer dump-autoload
。app/helpers.php
或app/Helpers/
似乎是一个更好的地方。
composer dump-autoload
怎么办?
composer dump-autoload
您可以按照以下步骤操作:developed.be/2014/08/29/composer-dump-autoload-laravel
在SO和Google上筛选了各种答案之后,我仍然找不到最佳方法。大多数答案都建议我们离开应用程序,并依靠第三方工具Composer来完成这项工作,但是我不认为将工具与仅包含文件相结合是明智的。
安德鲁·布朗的答案与我认为应该采取的方法最接近,但是(至少在5.1中),服务提供者步骤是不必要的。Heisian的回答突出显示了PSR-4
它的使用,使我们更近了一步。这是我为视图中的助手提供的最终实现:
首先,在应用程序目录中的任何位置创建一个带有名称空间的帮助文件:
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
并且别名应将帮助程序公开给您的视图,因此在您的视图中,如果键入:
{!! BobFinder::bob() !!}
它应该输出:
<strong>Bob?! Is that you?!</strong>
{!! bob() !!}
。将做更多的搜索,看看是否有可能
bob()
真正实现全球化并不是一件明智的事情。命名空间是有原因的,我们不应该bob()
在基本的PHP函数旁边调用。我将在您的代码中添加您的别名-谢谢!
extends Helper
?对我来说似乎没有必要。
extends Helper
的确是没有必要的。感谢您的注意。
是的,还有另一种方法!
步骤1:注册自定义的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中的自定义类》
这是我的HelpersProvider.php文件:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider
{
protected $helpers = [
// Add your helpers in here
];
/**
* Bootstrap the application services.
*/
public function boot()
{
//
}
/**
* Register the application services.
*/
public function register()
{
foreach ($this->helpers as $helper) {
$helper_path = app_path().'/Helpers/'.$helper.'.php';
if (\File::isFile($helper_path)) {
require_once $helper_path;
}
}
}
}
您应该Helpers
在该app
文件夹下创建一个名为的文件夹,然后创建一个名为whatever.php
inside 的文件,并将字符串添加whatever
到$ helpers数组内。
做完了!
我不再使用此选项,我目前正在使用composer加载诸如助手之类的静态文件。
您可以直接在以下位置添加帮助程序:
...
"autoload": {
"files": [
"app/helpers/my_helper.php",
...
]
},
...
glob()
像Andrew Brown所写的那样加载目录中的所有文件吗?如果您希望能够指定要包括的文件,为什么不composer.json
按照Joseph Silber的说明在中指定文件以自动加载?您为什么更喜欢这种解决方案?我并不是说这是一个不好的解决方案,我只是很好奇。
composer.json
只有两点:第一,它将映射保留在应用程序内部,而不是元数据文件。第二,它不需要您composer dump-autoload
每次更改要加载的文件列表时都重新运行。
对于Laravel项目中的Custom Helper Libraries,我Libraries
在Laravel/App
Directory和Libraries目录中创建了一个名称为文件夹的文件夹,并为不同的helper库创建了各种文件。
创建了辅助文件后,我只需将所有这些文件包含在我的composer.json文件中,就像这样
...
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Libraries/commonFunctions.php"
],
"psr-4": {
"App\\": "app/"
}
},
...
并执行
composer dump-autoload
composer dump-autoload
并且composer dumpautoload
也适用INFACT composer du
还将努力...
由于OP要求最佳实践,因此我认为我们在这里仍然缺少一些好的建议。
单个helpers.php文件远不是一个好习惯。首先,因为您混合了许多不同种类的功能,所以您违反了良好的编码原则。此外,这不仅会损害代码文档,还会损害诸如Cyclomatic Complexity,Maintenanceability Index和Halstead Volume的代码指标。您拥有的功能越多,情况就越糟。
代码文件将使用好的工具,如可phpDocumentor的,但使用萨米它不会渲染程序文件。Laravel API文档就是这种情况-没有帮助函数文档:https ://laravel.com/api/5.4
可以使用PhpMetrics之类的工具来分析代码度量。使用PhpMetrics版本1.x来分析Laravel 5.4框架代码会给src / Illuminate / Foundation / helpers.php和src / Illuminate / Support / helpers.php文件提供非常差的CC / MI / HV度量。
多个上下文帮助文件(例如string_helpers.php,array_helpers.php等)肯定会改善这些不良指标,从而使代码更易于维护。根据所使用的代码文档生成器,这将足够好。
可以通过将辅助类与静态方法一起使用来进一步改进它,以便可以使用名称空间对它们进行上下文化。就像Laravel已经和Illuminate\Support\Str
and Illuminate\Support\Arr
类一样。这样可以改善代码指标/组织和文档编制。类别名可以使它们更易于使用。
使用类进行结构设计可以使代码的组织和文档更好,但另一方面,我们最终失去了那些简短易记的全局函数。我们可以通过为那些静态类方法创建函数别名来进一步改进该方法。这可以手动或动态完成。
Laravel在内部使用第一种方法,方法是在过程帮助器文件中声明映射到静态类方法的函数。这可能不是理想的选择,因为您需要重新声明所有内容(docblocks /参数)。
我个人将动态方法与HelperServiceProvider
在执行时创建这些函数的类一起使用:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider
{
/**
* The helper mappings for the application.
*
* @var array
*/
protected $helpers = [
'uppercase' => 'App\Support\Helpers\StringHelper::uppercase',
'lowercase' => 'App\Support\Helpers\StringHelper::lowercase',
];
/**
* Bootstrap the application helpers.
*
* @return void
*/
public function boot()
{
foreach ($this->helpers as $alias => $method) {
if (!function_exists($alias)) {
eval("function {$alias}(...\$args) { return {$method}(...\$args); }");
}
}
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
可以说这是工程上的问题,但我不这么认为。它运行良好,并且与预期的相反,至少在使用PHP 7.x时,它不会花费相关的执行时间。
这是我创建的bash shell脚本,用于非常快速地制作Laravel 5外墙。
在您的Laravel 5安装目录中运行。
make_facade.sh -f <facade_name> -n '<namespace_prefix>'
例:
make_facade.sh -f helper -n 'App\MyApp'
如果你运行的例子,它会创建目录Facades
,并Providers
在“your_laravel_installation_dir /应用程序/ MyApp的”。
./app/MyApp/Facades/Helper.php
./app/MyApp/Facades/HelperFacade.php
./app/MyApp/Providers/HelperServiceProvider.php
完成后,它将显示类似于以下内容的消息:
===========================
Finished
===========================
Add these lines to config/app.php:
----------------------------------
Providers: App\MyApp\Providers\HelperServiceProvider,
Alias: 'Helper' => 'App\MyApp\Facades\HelperFacade',
因此,更新“ config / app.php”中的“提供程序和别名”列表
跑 composer -o dumpautoload
“ ./app/MyApp/Facades/Helper.php”最初看起来像这样:
<?php
namespace App\MyApp\Facades;
class Helper
{
//
}
现在,只需将您的方法添加到“ ./app/MyApp/Facades/Helper.php”中。
添加辅助函数后,“ ./ app / MyApp / Facades / Helper.php”的外观如下。
<?php
namespace App\MyApp\Facades;
use Request;
class Helper
{
public function isActive($pattern = null, $include_class = false)
{
return ((Request::is($pattern)) ? (($include_class) ? 'class="active"' : 'active' ) : '');
}
}
This is how it would be called:
===============================
{!! Helper::isActive('help', true) !!}
该函数需要一个模式,并且可以接受可选的第二个布尔参数。
如果当前URL与传递给它的模式匹配,则它将输出'active'(如果您将'true'作为第二个参数添加到函数调用中,则将输出'class =“ active”')。
我用它来突出显示活动菜单。
#!/bin/bash
display_syntax(){
echo ""
echo " The Syntax is like this:"
echo " ========================"
echo " "$(basename $0)" -f <facade_name> -n '<namespace_prefix>'"
echo ""
echo " Example:"
echo " ========"
echo " "$(basename $0) -f test -n "'App\MyAppDirectory'"
echo ""
}
if [ $# -ne 4 ]
then
echo ""
display_syntax
exit
else
# Use > 0 to consume one or more arguments per pass in the loop (e.g.
# some arguments don't have a corresponding value to go with it such
# as in the --default example).
while [[ $# > 0 ]]
do
key="$1"
case $key in
-n|--namespace_prefix)
namespace_prefix_in="$2"
echo ""
shift # past argument
;;
-f|--facade)
facade_name_in="$2"
shift # past argument
;;
*)
# unknown option
;;
esac
shift # past argument or value
done
fi
echo Facade Name = ${facade_name_in}
echo Namespace Prefix = $(echo ${namespace_prefix_in} | sed -e 's#\\#\\\\#')
echo ""
}
function display_start_banner(){
echo '**********************************************************'
echo '* STARTING LARAVEL MAKE FACADE SCRIPT'
echo '**********************************************************'
}
# Init the Vars that I can in the beginning
function init_and_export_vars(){
echo
echo "INIT and EXPORT VARS"
echo "===================="
# Substitution Tokens:
#
# Tokens:
# {namespace_prefix}
# {namespace_prefix_lowerfirstchar}
# {facade_name_upcase}
# {facade_name_lowercase}
#
namespace_prefix=$(echo ${namespace_prefix_in} | sed -e 's#\\#\\\\#')
namespace_prefix_lowerfirstchar=$(echo ${namespace_prefix_in} | sed -e 's#\\#/#g' -e 's/^\(.\)/\l\1/g')
facade_name_upcase=$(echo ${facade_name_in} | sed -e 's/\b\(.\)/\u\1/')
facade_name_lowercase=$(echo ${facade_name_in} | awk '{print tolower($0)}')
# Filename: {facade_name_upcase}.php - SOURCE TEMPLATE
source_template='<?php
namespace {namespace_prefix}\Facades;
class {facade_name_upcase}
{
//
}
'
# Filename: {facade_name_upcase}ServiceProvider.php - SERVICE PROVIDER TEMPLATE
serviceProvider_template='<?php
namespace {namespace_prefix}\Providers;
use Illuminate\Support\ServiceProvider;
use App;
class {facade_name_upcase}ServiceProvider extends ServiceProvider {
public function boot()
{
//
}
public function register()
{
App::bind("{facade_name_lowercase}", function()
{
return new \{namespace_prefix}\Facades\{facade_name_upcase};
});
}
}
'
# {facade_name_upcase}Facade.php - FACADE TEMPLATE
facade_template='<?php
namespace {namespace_prefix}\Facades;
use Illuminate\Support\Facades\Facade;
class {facade_name_upcase}Facade extends Facade {
protected static function getFacadeAccessor() { return "{facade_name_lowercase}"; }
}
'
}
function checkDirectoryExists(){
if [ ! -d ${namespace_prefix_lowerfirstchar} ]
then
echo ""
echo "Can't find the namespace: "${namespace_prefix_in}
echo ""
echo "*** NOTE:"
echo " Make sure the namspace directory exists and"
echo " you use quotes around the namespace_prefix."
echo ""
display_syntax
exit
fi
}
function makeDirectories(){
echo "Make Directories"
echo "================"
mkdir -p ${namespace_prefix_lowerfirstchar}/Facades
mkdir -p ${namespace_prefix_lowerfirstchar}/Providers
mkdir -p ${namespace_prefix_lowerfirstchar}/Facades
}
function createSourceTemplate(){
source_template=$(echo "${source_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g')
echo "Create Source Template:"
echo "======================="
echo "${source_template}"
echo ""
echo "${source_template}" > ./${namespace_prefix_lowerfirstchar}/Facades/${facade_name_upcase}.php
}
function createServiceProviderTemplate(){
serviceProvider_template=$(echo "${serviceProvider_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g')
echo "Create ServiceProvider Template:"
echo "================================"
echo "${serviceProvider_template}"
echo ""
echo "${serviceProvider_template}" > ./${namespace_prefix_lowerfirstchar}/Providers/${facade_name_upcase}ServiceProvider.php
}
function createFacadeTemplate(){
facade_template=$(echo "${facade_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g')
echo "Create Facade Template:"
echo "======================="
echo "${facade_template}"
echo ""
echo "${facade_template}" > ./${namespace_prefix_lowerfirstchar}/Facades/${facade_name_upcase}Facade.php
}
function serviceProviderPrompt(){
echo "Providers: ${namespace_prefix_in}\Providers\\${facade_name_upcase}ServiceProvider,"
}
function aliasPrompt(){
echo "Alias: '"${facade_name_upcase}"' => '"${namespace_prefix_in}"\Facades\\${facade_name_upcase}Facade',"
}
#
# END FUNCTION DECLARATIONS
#
###########################
## START RUNNING SCRIPT ##
###########################
display_start_banner
init_and_export_vars
makeDirectories
checkDirectoryExists
echo ""
createSourceTemplate
createServiceProviderTemplate
createFacadeTemplate
echo ""
echo "==========================="
echo " Finished TEST"
echo "==========================="
echo ""
echo "Add these lines to config/app.php:"
echo "----------------------------------"
serviceProviderPrompt
aliasPrompt
echo ""
您实际上可以config/app.php
在别名下添加到文件中,而不必包括自定义帮助程序类。
应该是这样的。
'aliases' => [
...
...
'Helper' => App\Http\Services\Helper::class,
]
然后使用“使用帮助器”方法将“帮助器”包含在控制器中,这样您就可以简单地在“帮助器”类上调用某些方法。
eg. Helper::some_function();
或在资源视图中,您可以直接调用Helper类。
eg. {{Helper::foo()}}
但这仍然是要遵循的开发人员编码风格方法。我们可能有不同的解决问题的方式,我只想向初学者分享我所拥有的。
创建自定义帮助程序目录: 首先在应用程序目录中创建帮助程序目录。 创建hlper类定义: 现在让我们创建一个简单的帮助器函数,该函数将连接两个字符串。在/app/Helpers/MyFuncs.php中创建一个新文件MyFuncs.php添加以下代码
<?php
namespace App\Helpers;
class MyFuncs {
public static function full_name($first_name,$last_name) {
return $first_name . ', '. $last_name;
}
}
命名空间App \ Helpers; 在App名称空间下定义Helpers名称空间。类MyFuncs {…}定义了辅助类MyFuncs。公共静态函数full_name($ first_name,$ last_name){…}定义了一个静态函数,该函数接受两个字符串参数并返回一个串联的字符串
帮手服务上课
服务提供者用于自动加载类。我们将需要定义一个服务提供商,该服务提供商将在/ app / Helpers目录中加载我们所有的帮助程序类。
运行以下artisan命令:
php artisan make:provider HelperServiceProvider
该文件将在 /app/Providers/HelperServiceProvider.php
Open /app/Providers/HelperServiceProvider.php
添加以下代码:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider {
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
require_once($filename);
}
}
}
这里,
namespace App\Providers; defines the namespace provider
use Illuminate\Support\ServiceProvider; imports the ServiceProvider class namespace
class HelperServiceProvider extends ServiceProvider {…} defines a class HelperServiceProvider that extends the ServiceProvider class
public function boot(){…} bootstraps the application service
public function register(){…} is the function that loads the helpers
foreach (glob(app_path().'/Helpers/*.php') as $filename){…} loops through all the files in /app/Helpers directory and loads them.
现在,我们需要注册HelperServiceProvider并为我们的助手创建一个别名。
开启/config/app.php
档案
找到provider数组变量
添加以下行
App\Providers\HelperServiceProvider::class,
找到别名数组变量
添加以下行
'MyFuncs' => App\Helpers\MyFuncs::class,
使用我们的自定义助手保存更改
我们将创建一条路线,该路线将调用我们的自定义帮助函数Open /app/routes.php
添加以下路由定义
Route::get('/func', function () {
return MyFuncs::full_name("John","Doe");
});
这里,
return MyFuncs::full_name("John","Doe"); calls the static function full_name in MyFuncs class
编写自定义助手的最佳实践是
1)在app
项目根目录的目录中,创建一个名为Helpers的文件夹(仅用于分离和构建代码)。
2)在文件夹内写psr-4文件或普通的php文件
如果PHP文件的格式为psr-4,则会自动加载,否则在项目根目录内的composer.json中添加以下行
在autoload
密钥内部,创建一个名为files
自动加载时加载文件的新密钥,在files
对象内部添加从app目录开始的路径。这是一个示例。
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Helpers/customHelpers.php"
]
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
PS:composer dump-autoload
如果未加载文件,请尝试运行。
在app / Helper / Helpers.php中创建Helpers.php
namespace App\Helper
class Helpers
{
}
添加作曲家和作曲家更新
"autoload": {
"classmap": [
"database/seeds",
"database/factories",
"database","app/Helper/Helpers.php"
],
"psr-4": {
"App\\": "app/"
},
"files": ["app/Helper/Helpers.php"]
},
在控制器中使用
使用App \ Helper \ Helpers
在config-> app.php文件中的视图更改中使用
'aliases' => [
...
'Helpers' => 'App\Helper\Helpers'
],
视线中
<?php echo Helpers::function_name(); ?>
composer.json
是没有用的,因为psr-4自动加载将完成此工作。
**
**建立新的帮手
<?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.3及更高版本中,laravel团队将所有过程文件(routes.php
)移出app/
目录,并且整个app/
文件夹被psr-4
自动加载。在这种情况下,可以接受的答案有效,但我觉得不合适。
因此,我要做的是helpers/
在项目的根目录下创建一个目录,并将帮助程序文件放入其中,然后在composer.json
文件中执行以下操作:
...
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"helpers/ui_helpers.php"
]
},
...
这样,我的app/
目录仍然是psr-4自动加载的目录,并且帮助程序的组织性更好。
希望这对某人有帮助。
这里有一些很好的答案,但我认为这是最简单的。在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自动解决具体课程。