私はこの作業に手間取っていて、のステップバイステップの実装を示したいので、私は聞いています。Laravel 5.2(/ app以外)にファサードを設定する方法
参考文献:
- https://laravel.com/docs/5.0/facades#creating-facades
- http://www.n0impossible.com/article/how-to-create-facade-on-laravel-51
私はこの作業に手間取っていて、のステップバイステップの実装を示したいので、私は聞いています。Laravel 5.2(/ app以外)にファサードを設定する方法
参考文献:
これはLaravel 5のファサードを実装するための唯一の方法ではないかもしれないが、ここで私はそれをどうやっです。
Foo
ファサードは、Foobar
ネームスペースで使用できます。
ファーストカスタムクラスを作成します。それは簡単に見つけることができる独自のnamespaceを取得します。私の場合はディレクトリがfoobarにと呼ばれる
:ここで
、私たちは私たちのクラス定義を使用して新しいPHPファイルを作成します。私の場合、私はそれをFoo.php
と呼んだ。
<?php
// %LARAVEL_ROOT%/Foobar/Foo.php
namespace Foobar;
class Foo
{
public function Bar()
{
return 'got it!';
}
}
を作成し、我々は我々のファサードのための新しいPHPファイルを追加することができます。私はそれをFooFacade.php
と呼ぶつもりで、Foobar \ Facadesと呼ばれる別の名前空間に入れています。 この場合のネームスペースは、フォルダ構造を反映していないことに注意してください。あなたが必要になるので、あなたはに戻る何
<?php
// %LARAVEL_ROO%/Foobar/FooFacade.php
namespace Foobar\Facades;
use Illuminate\Support\Facades\Facade;
class Foo extends Facade
{
protected static function getFacadeAccessor()
{
return 'foo'; // Keep this in mind
}
}
また、既存のFacadeクラスを拡張しています。
php artisan
を使用して新しいプロバイダを作成します。ありがたいことに、我々は素晴らしいartisan
ツールを持っています。私の場合、私はそれをFooProvider
と呼ぶつもりです。
php artisan make:provider FooProvider
Bam!私たちはプロバイダを持っています。 Read more about service providers here.今のところ2つの機能(boot
とregister
)があることを知り、register
にいくつかのコードを追加します。私たちは、新しいプロバイダ我々のアプリbindするつもりだ:
$this->app->bind('foo', function() {
return new Foo; //Add the proper namespace at the top
});
をだからこれbind('foo'
部分は、実際にあなたがあなたのFooFacade.php
コードに入れるものと一致する予定です。私が前にreturn 'foo';
と言ったところで、私はこのバインドをそれに合わせたいと思っています。 (私はreturn 'wtv';
を言っていると思います場合は、私はここにbind('wtv',
を言うと思います。)
さらに、我々はどこFoo
を見つけるためにLaravelを指示する必要があります!
だから、一番上に我々は今、全ファイルチェックアウトの名前空間
use \Foobar\Foo;
を追加します。
<?php
// %LARAVEL_ROOT%/app/Providers/FooProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Foobar\Foo;
class FooProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('foo', function() {
return new Foo;
});
}
}
Foobar\Foo
なくFoobar\Facades\Foo
を使用していることを確認してください - あなたのIDEが示唆するかもしれません間違った完了。config/app.php
ファイルでそれを行うことができますconfig/app.php
に私達の参照を追加します。
は'providers'
に、あなたのプロバイダクラスの参照を追加します。App\Providers\FooProvider::class
が'aliases'
にあなたのファサードクラスの参照を追加します。'Foo' => Foobar\Facades\Foo::class
は覚えておいてください、別名で、私は'Foo'
を書いたところ、ファサードを参照したい名前をそこに入れたいと思うでしょう。だから、あなたはあなたのアプリケーションの周りMyBigOlFacade::helloWorld()
を使用したい場合は、あなたが'MyBigOlFacade' => MyApp\WhereEverMyFacadesAre\MyBigOlFacade::class
composer.json
最後のコードの変更は、あなたのcomposer.json
のpsr-4
スペースを更新することです。あなたはこれを追加する必要があります:
"psr-4": {
"Foobar\\" : "Foobar/",
// Whatever you had already can stay
}
オーケー、今あなたが変更されているすべてを持っていることを、あなたが必要とする最後の事は作曲と職人の両方でキャッシュをリフレッシュすることです。これを試してみてください:
composer dumpautoload
php artisan cache:clear
app/routes.php
にルートを作成します。
Route::get('/foobar', '[email protected]');
その後
php artisan make:controller FooBarController
を実行し、それが今に見えるので、いくつかのコードを追加します。このように:
01あなたが次の文字列で終わる必要があります<?php
namespace App\Http\Controllers;
use Foobar\Facades\Foo;
use App\Http\Requests;
class FooBarController extends Controller
{
public function testFoo()
{
dd(Foo::Bar());
}
}
:
Foobar\Facades\Foo
、を見つけることができないと言って終わると、エラーした場合試してみてくださいphp artisan optimize
**お願い!**このガイドを使用しても問題が解決しない場合は、教えてください。 – Martin
最後のコマンドはcache:clear not cache:clean – IlGala
もう1つは、キャッシュをクリアしてLaravelが "Class not found error"を返すため、コマンドを実行しました** php artisan optimize **とすべてが動作しました – IlGala