回答:
醜い、怠惰で恐ろしい方法:の最後にbootstrap/start.php
、を追加し、include('tools.php')
その新しいファイルに関数を配置します。
クリーンな方法:ライブラリを作成します。そうすれば、実際に使用したときにのみ自動ロードされます。
libraries
フォルダ内にapp
フォルダを作成しますstart/global.php
に追加app_path().'/libraries'
しClassLoader::addDirectories(
ます。composer.json
に追加"app/libraries"
しautoload
ます。走るcomposer dump-autoload
global.php
ファイルから引用したオプションについて
Composerの使用に加えて、Laravelクラスローダーを使用して、コントローラーとモデルをロードできます。これは、Composerを更新せずにすべてのクラスを「グローバル」名前空間に保持するのに役立ちます。
両方のオプションを組み合わせることができます。Laravelクラスローダーは登録されたディレクトリ内のクラスを自動的に検索し(オプション1、簡単)、Composerはすべてのクラスの記録を保持しますが、更新した後でのみ(オプション2、パフォーマンスが向上する可能性があります)。
sitehelpers.php
これを行う私の方法は/app
、Laravel 4プロジェクトのルートのディレクトリに新しいフォルダーを作成することです。次に、このフォルダーを次の/app/start/global.php
ようにファイルの最初の配列に追加します。
<?php
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/classes', // This line is the one I've added.
));
新しい/app/classes
フォルダー内のフォルダー構造が名前空間の規則に従う限り。Laravel 4は、このフォルダー内のすべてのクラス/ファイルを自動ロードします。この方法では、composerファイルを調べたり、composerコマンドを実行したりする必要はありません。
これがベストプラクティスかどうかはわかりませんが、確実に機能します。
次のような単純なファイルを作成した場合/app/classes/Helpers/Helper.php
:
<?php namespace Helpers;
class Helper {
public static function helloWorld()
{
return 'Hello World';
}
}
あなたがする必要があるだろうすべては電話です Helpers\Helper::helloWorld();
このヘルパークラスを/app/config/app.php
ファイルにエイリアスすることもできます。このようなものをaliases
配列の最後に追加するだけです:
'Helper' => 'Helpers\Helper'
composer dump-autoload
。私は20分間かけて頭を掻きました。
Laravelのhelpers.phpメソッドは、それをcomposer.json(https://github.com/laravel/framework/blob/master/composer.json)の「ファイル」に追加する方法です。
"autoload": {
"classmap": [
...
],
"files": [
"app/libraries/helpers.php"
],
},
私がやっていることは小さなクラスを作成することです(クラスごとにいくつかのメソッド、メソッドごとに1行、すべてが何かから拡張され、DRY、それが私の目標です)、
class ExtendedCarbon extends Carbon\Carbon {
public function formatDDMMAAAA($date)
{
/// format and return
}
}
それらをapp / librariesに保存し、composer.jsonに追加します。
"autoload": {
"classmap": [
...
"app/libraries",
...
],
},
実行する
composer dump
そして、必要な場所で使用してください
$formatted = (new ExtendedCarbon)->formatDDMMAAAA($date);
リファクタリングに関するこのビデオを見る:http : //www.youtube.com/watch? v = DC-pQPq0acs
ちなみに、これは一例に過ぎないと確信していますが、Laravelのすべての日付はCarbon(https://github.com/briannesbitt/Carbon)のインスタンスであるため、日付をフォーマットするヘルパーは必要ないかもしれません。日付と時刻をフォーマットするための多くのメソッドがあります。
formatDDMMAAAA()
として持つ方がはるかに良いと確信していますstatic
。
View::share()
これを達成するためにクロージャーと一緒に使用することもできます-私はこれについて投稿しました:http : //www.develophp.org/2014/07/laravel-4-blade-helper-functions/
追加された利点:追加のクラスを作成する必要はなく、グローバル名前空間もクリーンに保つ必要があります。
app_path().'/library'
start / global.phpにもを配置する必要があると思います。