私はほとんどのコントローラで使用する必要のあるいくつかの設定値を取得する必要があるLaravelアプリケーションを持っています。 したがって、これはミドルウェアを使用するのに最適な時期だと思われます。 これはミドルウェアの正しい使用ですか?もしそうなら、ミドルウェアがconfig変数を取得したら、これらをコントローラにアクセスできるようにリクエストオブジェクトに追加するのがベストプラクティスですか? レスポンダーに感謝します。 JLaravel Middlewareを使用する必要がありますか?
答えて
IMO、ミドルウェアは、要求の前処理、ユーザーアクセスの制限、およびその他のセキュリティ関連に使用されます。
メインのControllerクラスに設定をロードし、拡張コントローラで使用するだけです。例えば
:
ベースコントローラ
namespace App\Http\Controllers;
uses goes here ...;
class Controller extends BaseController
{
protected $configs = [];
public function __construct() {
$this->loadConfigs();
}
protected function loadConfigs()
{
//read configuration files or tables in database
//and put the values into '$this->configs';
}
}
ユーザーコントローラではない、間違いなく
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class User extends Controller
{
public function index()
{
echo $this->configs['toolbar.color']; //just an example
}
}
要求がコントローラに届く前に条件をチェックするミドルウェアがあります。 **および**後処理の前処理に使用されます。これはセキュリティ関連ではなく、条件に関連しています(1つの条件は「ユーザーは認証されている必要があります」)。これは変数の設定や要求がコントローラに届く前に必要なものすべてに使用できます。 –
Carlos、それは意味があるので、基本的にミドルウェアをフィルタリングに使用し、コントローラのほとんどのコントローラが必要とするかもしれないロジックをベースコントローラに入れてください: – jon
私はNBの意見は違うと思うが、NBはあなたの要求をmidldlewareとして追加するだろうか? – jon
!
実際に(書いたところによると)、アプリケーションサービスを作成し、サービスコンテナにこのサービスを登録するのが最も良い方法 - App\Providers\AppServiceProvider
(app/Providers/AppServiceProvider.php
)です。
このような何か:あなたのサービスプロバイダで
<?php
# The Config Service:
namespace App\Services;
/**
* Config Manager
*/
class Config
{
/** @var SomeDependency */
protected $dependency;
public function __construct(SomeDependency $dependency)
{
$this->dependency = $dependency;
}
public function getVar($var)
{
// ...
}
}
:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
//...
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->registerConfigManager();
}
public function registerConfigManager()
{
$this->app->singleton('config_service', function ($app) {
return new \App\Services\Config(new \SomeNamespace\SomeDependency);
});
}
//...
}
そして今、することができますが、このように、app()
を介してサービスコンテナにアクセスするには:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MyController extends Controller
{
public function index(Request $request)
{
app('config_service')->getVar('key');
//...
}
}
ありがとうございますfelipsmartins、これは、これはサービスプロバイダを使用する良い時期になることに同意していますか? – jon
それは良い解決策です – CarlosCarucce
@jon実際には、サービスプロバイダを作成する必要はありませんが、クラスを作成して、アプリケーションサービスとしてコンテナに登録するだけです。それは簡単で、行きやすい方法です。 – felipsmartins
- 1. Laravel PassportまたはJWTリソースを使用する必要がありますか?
- 2. laravelリクエスト/応答にpsr-7を使用する必要がありますか?
- 3. 私はどのLaravelのバージョンを使用する必要がありますか?
- 4. laravelでEAVモデルを使用する必要がありますか?
- 5. Laravel Throttle Middleware:コールバック/ハンドラがありますか?
- 6. @synthesizeをまだ使用する必要がありますか?
- 7. HTML5構文を使用する必要がありますか?
- 8. DreamweaverのSpryを使用する必要がありますか?
- 9. RecyclerViewでCursorLoaderを使用する必要がありますか?
- 10. DynamoDBでEC2を使用する必要がありますか?
- 11. オンラインゲームにTCPを使用する必要がありますか?
- 12. Rails 3.1:CoffeeScriptを使用する必要がありますか?
- 13. MVVMにDataTemplatesを使用する必要がありますか?
- 14. addTestDeviceを使用する必要がありますか?
- 15. なぜvalue.lengthを使用する必要がありますか?
- 16. Parcel.writeSerializableをParcelable.writeToParcelで使用する必要がありますか?
- 17. フォントでwebpackを使用する必要がありますか?
- 18. /csv:WriteAll()でError()を使用する必要がありますか?
- 19. 私はsingletableviewを使用する必要がありますか?
- 20. どのレイアウトマネージャを使用する必要がありますか?
- 21. ユニットテストでAutoMapperを使用する必要がありますか?
- 22. mysql_close(接続)を使用する必要がありますか?
- 23. インテントサービスを使用する必要がありますか?
- 24. f:paramを使用する必要がありますか?
- 25. アクセサーを使用する必要がありますか?
- 26. http.ListenAndServeでgoroutinesを使用する必要がありますか?
- 27. UUIDなどを使用する必要がありますか?
- 28. GMSGroundOverlayアニメーション - CATiledLayerを使用する必要がありますか?
- 29. Android:MimeTypeMap.getFileExtensionFromUrl()を使用する必要がありますか? [バグ]
- 30. Erlangでワーカープールを使用する必要がありますか?
はありますconfig varsスタティックまたはダイナミック。 – whoacowboy
ミドルウェア内で定義されると、静的になります。 – jon
変数を使用しているもの、その持続時間などの詳細情報を追加できます。 – whoacowboy