回答:
helpers.php
appフォルダーにファイルを作成し、composerでロードします。
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helpers.php" // <---- ADD THIS
]
},
これをcomposer.json
ファイルに追加したら、次のコマンドを実行します。
composer dump-autoload
(PSR-4名前空間クラスファイルではないため)ディレクトリにhelpers.php
ファイルを保持したくない場合はapp
、laravel.com
Webサイトの機能を実行できます。helpers.php
ブートストラップディレクトリにを保存します。composer.json
ファイルに必ず設定してください。
"files": [
"bootstrap/helpers.php"
]
この回答は、Laravel内の一般的なカスタムクラスに適用されます。ブレード固有の回答については、Laravel 5のカスタムブレードディレクティブを参照してください。
ステップ1:ヘルパー(または他のカスタムクラス)ファイルを作成し、それに一致する名前空間を付けます。クラスとメソッドを記述します。
<?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();
、ブレードを正常に呼び出すことができます。
私の最初の考えは、作曲家のオートロードでもありましたが、私にとっては、Laravel 5のようには感じられませんでした。L5はサービスプロバイダーを多用します。これらはアプリケーションをブートストラップするものです。
まず、app
ディレクトリにというフォルダを作成しましたHelpers
。次に、Helpers
フォルダー内に、追加したい機能のファイルを追加しました。フォルダに複数のファイルが含まれていると、1つの大きなファイルが長くなりすぎて管理できなくなるのを回避できます。
次に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' => [
'App\Providers\HelperServiceProvider',
]
今、あなたの中の任意のファイルHelpers
ディレクトリが読み込まれ、使用する準備ができています。
更新2016-02-22
ここには良いオプションがたくさんありますが、私の答えがあなたにとってうまくいくなら、私は先に進んでこの方法でヘルパーを含めるためのパッケージを作りました。インスピレーションを得るためにパッケージを使用することも、Composerでパッケージをダウンロードすることもできます。私が頻繁に使用する組み込みヘルパーがいくつかあります(ただし、デフォルトではすべて非アクティブです)。シンプルなArtisanジェネレーターで独自のカスタムヘルパーを作成できます。また、1つのレスポンダーがマッパーを使用するという提案に対処し、カスタムヘルパーを明示的に定義して、ヘルパーディレクトリ内のすべてのPHPファイルをロードするか、デフォルトで自動的にロードできるようにします。フィードバックとPRは大歓迎です!
composer require browner12/helpers
Github:browner12 / helpers
start.php
です(これは素晴らしいことではありませんでしたが、当時はその目的に役立ちました)。複数のファイルをロードするための別の提案がありますか?
これはJeffreyWay
、このララキャストディスカッションで提案されているものです。
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に依存して仕事をしていることを示唆していますが、ファイルを含めるためだけにツールに結合することは賢明ではないと確信しています。
Andrew Brownの答えは、私がそれに取り組むべきであると私が思う方法に最も近くなりましたが、(少なくとも5.1では)サービスプロバイダーの手順は不要です。ハイジアンの答えは、その使用PSR-4
が私たちに一歩近づくのを強調しています。ビューでのヘルパーの最終的な実装は次のとおりです。
まず、名前空間を使用して、appsディレクトリの任意の場所にヘルパーファイルを作成します。
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
、2つの点を除いて、マッピングを行うこととそれほど変わりません。まず、メタデータファイルではなく、アプリケーション自体の内部にマップを保持します。composer dump-autoload
次に、ロードするファイルのリストを変更するたびに再実行する必要はありません。
私Laravelプロジェクトにカスタムヘルパーライブラリについては、私は名前のフォルダを作成しているLibraries
私にはLaravel/App
ディレクトリとライブラリディレクトリ内、私は別のヘルパーライブラリのさまざまなファイルを作成しました。
ヘルパーファイルを作成した後、これらのすべてのファイルを次のようにcomposer.jsonファイルに含めるだけです。
...
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Libraries/commonFunctions.php"
],
"psr-4": {
"App\\": "app/"
}
},
...
そして実行する
composer dump-autoload
composer dump-autoload
また、composer dumpautoload
実際に動作composer du
することも動作します...
OPがベストプラクティスを求めてきたため、ここではまだいくつかの良いアドバイスが欠けていると思います。
単一のhelpers.phpファイルは、良い習慣とはほど遠いものです。第一に、さまざまな種類の関数を混在させているため、優れたコーディング原則に違反しているからです。さらに、これはコードのドキュメントだけでなく、循環的複雑度、保守性インデックス、ハルステッドボリュームなどのコードメトリックにも悪影響を与える可能性があります。機能が多ければ多いほど、悪化します。
コードのドキュメントは、[OK]をはのようなツールを使用することになり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
やIlluminate\Support\Arr
クラスで行っているように。これにより、コードのメトリックス/組織とドキュメントの両方が改善されます。クラスエイリアスを使用すると、クラスエイリアスを使いやすくすることができます。
クラスを使って構造化すると、コードの編成とドキュメントが改善されますが、一方で、グローバルな関数を短く覚えやすいものから失うことになります。これらの静的クラスメソッドに関数エイリアスを作成することで、このアプローチをさらに改善できます。これは手動または動的に実行できます。
Laravelは、静的クラスメソッドにマップする手続き型ヘルパーファイルで関数を宣言することにより、内部的に最初のアプローチを使用します。すべてのもの(docblocks / arguments)を再宣言する必要があるため、これは理想的なものではない可能性があります。
私は個人的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を使用している場合は、関連する実行時間のコストがかからないことが予想されます。
Laravel 5のファサードを非常にすばやく作成するために作成したbashシェルスクリプトを次に示します。
これを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 / app / 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) !!}
この関数はパターンを期待し、オプションの2番目のブール引数を受け入れることができます。
現在のURLが渡されたパターンと一致する場合、「アクティブ」(または、関数呼び出しの2番目の引数として「true」を追加した場合は「クラス=アクティブ」)を出力します。
これを使用して、アクティブなメニューを強調表示します。
#!/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,
]
次に、コントローラに、メソッド 'use Helper'を使用してヘルパーを含めます。これにより、ヘルパークラスのメソッドの一部を簡単に呼び出すことができます。
eg. Helper::some_function();
またはリソースビューで、直接Helperクラスを直接呼び出すことができます。
eg. {{Helper::foo()}}
しかし、これは依然として従うべき開発者コーディングスタイルのアプローチです。私たちは問題を解決する別の方法を持っているかもしれません、そして私は初心者のために私があまりにも持っているものを共有したいだけです。
カスタムヘルパーのディレクトリを作成します。 まず、アプリケーションディレクトリにヘルパーディレクトリを作成します。 hlperクラス定義の作成: 2つの文字列を連結する単純なヘルパー関数を作成しましょう。/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を定義します。public static function full_name($ first_name、$ last_name){…}は、2つの文字列パラメーターを受け入れ、連結された文字列を返す静的関数を定義します
ヘルパーサービス提供クラス
サービスプロバイダーは、クラスの自動読み込みに使用されます。すべてのヘルパークラスを/ 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
ファイルを開く
プロバイダー配列変数を見つける
次の行を追加します
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つの方法は次のとおりです。1)app \ FolderName \ fileName.phpにファイルを作成し、その中にこのコードを含めました。
<?php
namespace App\library
{
class hrapplication{
public static function libData(){
return "Data";
}
}
}
?>
2)その後、私たちのブレードで
$FmyFunctions = new \App\FolderName\classsName;
echo $is_ok = ($FmyFunctions->libData());
それでおしまい。そしてそれは動作します
カスタムヘルパーを書くためのベストプラクティスは
1)app
プロジェクトルートのディレクトリ内に、Helpersという名前のフォルダーを作成します(コードを分離して構造化するだけです)。
2)フォルダー内にpsr-4ファイルまたは通常のphpファイルを書き込みます
PHPファイルの形式がpsr-4の場合は、自動ロードされます。それ以外の場合は、プロジェクトのルートディレクトリ内にあるcomposer.jsonに次の行を追加します。
autoload
キー内に、files
自動ロード時にファイルをロードするという名前の新しいキーを作成し、files
オブジェクト内にアプリディレクトリから始まるパスを追加します。以下に例を示します。
"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 autoloadが機能するため、ファイルを追加しても意味がありません。
dir bootstrap \ autoload.php
require __DIR__.'/../vendor/autoload.php';
require __DIR__.'/../app/Helpers/function.php'; //add
このファイルを追加
app\Helpers\function.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'));
}
}
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は具象クラスを自動的に解決します。