Как назвать тонкий контейнер внутри Laravel красноречивым - PullRequest
0 голосов
/ 09 мая 2018

Я использую slim 3 с красноречивым «освещением / базой данных»: «^ 5.6»,

в моем примере с тонким кодом

определить языковой класс в контейнере

$container['language'] = function($container){
    return new \App\Library\Language($container);
};

в классе языка у меня есть функция getLanguageId (), и это значение передается в стартовое приложение (в этом примере возвращаемый язык id = 1)

В блоге модели

<?php

use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
    protected $table = 'blog';
    protected $primaryKey = 'blog_id';

    public function getLanguageId(){
       // I need access to Slim container here
// Example return $container->get('language')->getLanguageId()
// It's possible to do ?
    }
}

Спасибо

1 Ответ

0 голосов
/ 09 мая 2018

Передайте идентификатор языка через конструктор:

<?php

use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
    private $lang;

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

    public function getLanguageId()
    {
       return $this->lang;
    }
}

Не допускайте попадания в антипаттерн сервисного локатора, поскольку он зависит от контейнера. Создайте свой объект так:

$lang = $container->get('language')->getLanguageId();
$blog = new Blog($lang);
...