2016-05-04 2 views
1

У меня есть приложение Laravel, которое требует получения некоторых конфигурационных варов, которые должны использоваться большинством моих контроллеров. Поэтому кажется, что это будет идеальное время для использования промежуточного программного обеспечения. Правильное ли использование промежуточного программного обеспечения? и если да, то когда промежуточное ПО получает конфигурационные вары, лучше ли добавлять их к объекту запроса, чтобы к ним мог обращаться мой контроллер? Спасибо любым респондентам. JДолжен ли я использовать промежуточное ПО Laravel?

+0

Являются config vars static или dynamic. – whoacowboy

+0

Как только они определены в промежуточном программном обеспечении, они являются статическими. – jon

+0

Можете ли вы добавить дополнительную информацию о том, для чего вы используете переменные, как долго они будут длиться и т. Д. – whoacowboy

ответ

1

IMO, middlewares сделаны для запросов на предварительную обработку, ограничивают доступ пользователей и другую связанную с безопасностью.

Я бы просто загрузил конфигурацию в основной класс контроллера и использовал его в расширяющих контроллерах.

Например:

базовый контроллер

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 
    } 
} 
+2

Существует промежуточное программное обеспечение, чтобы проверить условия, прежде чем отправлять запросы на ваши контроллеры. Они используются для предварительной обработки ** и ** постпроцессинга. Это не связано с безопасностью, это связано с условием (одним условием может быть «пользователь должен быть аутентифицирован»). Его можно использовать для установки переменных и всего, что необходимо до того, как запрос достигнет контроллера. Этот комментарий здесь, чтобы подчеркнуть, что ваше утверждение о промежуточном использовании для безопасности это не так. –

+1

Отличная благодарность Карлосу, что имеет смысл, поэтому в основном просто используйте промежуточное программное обеспечение для фильтрации и ставьте логику, которая может понадобиться большинству моих контроллеров в базовом контроллере. Это хорошо в моей голове :) – jon

+0

Хотя я вижу, что NB не согласен. Итак, NB вы бы добавили мои требования в качестве midldleware? – jon

2

Не, определенно!

Фактически (исходя из того, что вы написали), наилучшим способом является создание сервисной службы и регистрация этой услуги в Service Container - App\Providers\AppServiceProviderapp/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'); 
     //... 
    } 
} 
+0

Спасибо felipsmartins, согласны ли другие с тем, что это будет подходящее время для использования поставщика услуг? – jon

+1

Это хорошее решение. – CarlosCarucce

+0

@jon На самом деле, нет необходимости создавать поставщика услуг, а просто создавать класс, а затем регистрировать его как службу приложения в контейнере. Это просто и приятно. – felipsmartins

Смежные вопросы