[英]In Laravel, should I check for permission in controller if already checking on middleware?
[英]Should I use Laravel Middleware?
我有一個Laravel應用程序,需要獲得一些需要我的大多數控制器使用的配置變量。 因此,這似乎是使用中間件的最佳時機。 這是正確使用中間件嗎? 如果是這樣,一旦中間件獲得配置變量,最好將這些添加到請求對象中,以便我的控制器可以訪問它們嗎? 感謝任何響應者。 Ĵ
不,絕對!
實際上(根據您的編寫),最好的方法是創建一個應用程序服務並在Service Container - 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');
//...
}
}
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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.