laravel 5.2 проходная переменная во всех контроллерах - PullRequest
0 голосов
/ 02 мая 2020

Может кто-нибудь помочь, пожалуйста, я хочу сделать мои varaibles глобальными на всех контроллерах, не создавая каждый раз экземпляр .. settings = new Setting (); В настройках есть только одна строка.

Класс Controller расширяет BaseController

protected $settings;

    public function __construct() 
    {
        $this->settings = Setting::all();
        View::share('settings', $this->settings);
    }
}

и в другом контроллере я использую:

$this->settings->email;

, но он не работает, пожалуйста, я ищу и вижу, что этот метод не годится, может кто-нибудь, пожалуйста, дайте мне хороший подход для этого, laravel 5.2.

большое спасибо .. !!

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Использование провайдеров для просмотра. Используйте расширенный контроллер для контроллеров. Убедитесь, что ваш другой контроллер расширяет контроллер, который включает в себя значение глобальных настроек. Убедитесь, что ваш другой контроллер не имеет __construct или имеет конструкцию parent :: __.

Например, вы можете использовать 2 способа:

class Controller extends BaseController{
    protected $settings;
    public function __construct()
    {
        $this->settings = Setting::all();
    }
}

затем

class AnotherController extends Controller{

    public function __construct(){
        parent::__construct();
     //blahblah
    }
    public function anyMethod(){
        $asd = $this->settings;
    }
}

или

class AnotherController extends Controller{

    public function anyMethod(){
        $asd = $this->settings;
    }
}

Если вы хотите использовать файлы просмотра используйте AppServiceProvider. php в провайдерах

public function boot ()
{
    $settings = Setting::all();
    view ()->composer ( '*', function ( $view ) use ( $settings ) {
                $view->with ( 'settings', $settings );
            } );
}
0 голосов
/ 02 мая 2020

Просто добавьте в свою переменную настройки вашего родительского контроллера.

App / Http / Controllers / Controller. php

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public $settings;

    public function settings(){
       $this->settings = \App\Setting::all();
       return $this->settings;
    }
}

контроллеры вашего приложения расширяют контроллер, вам просто нужно добавить конструктор или вызвать $ this-> settings (), который загрузит ваши результаты в $ this-> settings в ваших контроллерах.

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyController extends Controller{

    public function __construct(){
        $this->settings();
    }

    public function someMethod(){
        // this is now available with results already loaded.
        $this->settings // option 1
        $this->settings() // this is the same as option 1 but runs the query when called and populates this settings property and returns the results.
    }
}
...