2つのコントローラーファイルhomecontrollerとbackendcontrollerがあります。グローバル関数を作成し、両方のファイルからアクセスする最良の方法は何ですか?
here Arian Acostaの答えは役に立ちましたが、最も簡単な方法はないかと思います。提案をいただければ幸いです。
任意の名前の共通ファイルを作成します。例えばCommon.phpで、その中にすべての共通機能を記述します。コントローラでこの共通機能にアクセスする場合は、「use」を使用してこのCommon.phpファイルを含めるだけです。
use Common;
その後、Common.phpに含まれるすべての共通関数にアクセスできます。同様に、他のコントローラーで行います。
これを行う1つの方法は、クラスを作成してそのインスタンスを使用することです。この方法では、コントローラー、ブレード、または他のクラス内のクラスのオブジェクトにもアクセスできません。
あなたのアプリフォルダにHelpersという名前のフォルダを作成し、その中にファイル名AppHelperまたは任意の選択を作成します
<?php
namespace App\Helpers;
class AppHelper
{
public function bladeHelper($someValue)
{
return "increment $someValue";
}
public function startQueryLog()
{
\DB::enableQueryLog();
}
public function showQueries()
{
dd(\DB::getQueryLog());
}
public static function instance()
{
return new AppHelper();
}
}
コントローラ内では、さまざまな機能を呼び出すことができます
public function index()
{
//some code
//need to debug query
\App\Helpers\AppHelper::instance()->startQueryLog();
//some code that executes queries
\App\Helpers\AppHelper::instance()->showQueries();
}
ブレードファイルを使用しているとしましょう。アプリブレードヘルパー関数を呼び出す方法は次のとおりです。
some html code
{{ \App\Helpers\AppHelper::instance()->bladeHelper($value) }}
and then some html code
また、config\app.phpでAppHelperクラスのエイリアスを作成することにより、完全な関数名前空間\ App\Helpersを呼び出すオーバーヘッドを削減できます。
'aliases' => [
....
'AppHelper' => App\Helpers\AppHelper::class
]
コントローラーまたはブレードファイルで、直接呼び出すことができます
\AppHelper::instance()->functioName();
Helpers
ディレクトリに新しいapp
フォルダーを作成します。php
フォルダーに_your_helper_function.php
_という名前のHelpers
ファイルを作成します。_your_helper_function.php
_内に関数を追加します
_function your_function($parameters){
//function logic
}
_
このファイルを_composer.json
_のFiles
キーに追加します
_
"autoload": {
...
"files": [
"app/Helpers/your_helper_function.php"
]
...
}
_
そして最後にcomposerファイルを自動読み込みします。これをプロジェクトディレクトリで実行します)
_composer dump-autoload
_
それでおしまい!これで、laravelプロジェクトの任意の部分でyour_function()
にアクセスできます。
複数の関数をグローバルに利用可能にしたい場合は、すべてを単一のファイルに入れて、そのファイルをステップ4に示すように_composer.json
_のFiles
キーに追加できます。
まだ混乱がある場合は、これを行う方法についての私のブログ投稿を確認してください:
あなたのController.php
which extends BaseController
、次のような関数を作成できます。
public function data($arr = false)
{
$data['foo'] = 'bar';
return array_merge($data,$arr);
}
また、ビューにデータを送信するときに任意のコントローラーから。
public function example()
{
$data['smthg'] = 'smthgelse';
return view('myView',$this->data($data));
}
メインコントローラーのデータには、すべてのコントローラーとブレードからアクセスできます。
Laravelはデフォルトで名前空間を使用します。そのため、ヘルパーファイルをセットアップするには、その回答に記載されている方法に従う必要があります。
あなたの場合では、異なるコントローラのメソッドにアクセスしたいのですが。これにはもっと簡単な方法があります。ベースコントローラーにメソッドを追加app/Http/Controllers/Controller.php
そして、他のすべてのコントローラーでそれらにアクセスできるのは、それらが拡張されているからです。
// in app/Http/Controllers/Controller.php
protected function dummy()
{
return 'dummy';
}
// in homecontroller
$this->dummy();
追加しようとしている機能に応じて、いくつかの方法があります。
1)Controller.php内に関数を作成し、他のすべてのコントローラーにそのコントローラーを拡張させます。これをmaster.blade.phpと多少比較することができます
2)トレイトを作成します。トレイトはあなたのために多くのことを行い、あなたのコントローラーをきれいに保ちます。私は個人的には、きれいに見える特性を使用するのが大好きです。私のController.phpが大量の異なるコード行で混乱しないようにしてください。