Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.11.2016 20:48:05

Miciew

Сервис-контейнеры.

Доброго времени. Вопрос такой.
При передаче ID модели в метод контроллера, в переменную попадает нужный объект.
Роут:

[b]Route::get('/foo/bar/{baz}, 'FooClass@fooMethod')[/b]

Метод:

[b]public functio foo( Bar $baz )[/b]

В переменной $baz будет, например, запись из БД.
Можно ли как-то эту переменную $baz пробросить в собственном сервис-контейнере при регистриции интерфейса?
То есть не новый объект запрашиваемого класса, а тот, что уже создан?

[b]$this->app->bind( FooContract::class, BarRepository::class )[/b]
class BarRepository()
{
public function __constructor( Baz $baz ){}
}

#2 23.11.2016 18:06:34

Miciew

Re: Сервис-контейнеры.

Неужели никто не знает? 3 сутки не могу разобраться. Кто-нибудь, отзовитесь )

#3 23.11.2016 18:10:58

Re: Сервис-контейнеры.

Зарегистрируйся

Не в сети

#4 24.11.2016 11:19:40

Re: Сервис-контейнеры.

Зарегистировался. Произойдет теперь чудо?

Не в сети

#5 25.11.2016 22:54:28

Re: Сервис-контейнеры.

А ты делаешь бинд внутри контроллера?

Может тебе подойдёт так?

// где-то в логике делаешь бинд
$this->app->bind( FooContract::class, BarRepository::class )
class BarRepository()
{
protected $model;
public function __constructor( Baz $baz ){
$this->setModel($baz);
}
public function setModel(Bar $baz) {
 $this->model = $baz;
}
}

// а в контроллере уже

public functio foo( Bar $baz ) {
$repository = app(FooContract::class);
$repository->setModel($baz);
}

Не в сети

#6 28.11.2016 23:52:01

Re: Сервис-контейнеры.

Да, в конструктор пробрасываю. Проблема в том,что он создает новый объект модели. Мне же нужен синглтон.
Не хотелось бы писать костылей, уверен, что это уже продумано из коробки.

Спасибо за ответ wink

Не в сети

#7 28.11.2016 23:54:14

Re: Сервис-контейнеры.

Нет, такой функциональности нет.
И вполне нормальная практика передавать нужную модель как аргумент (не в setModel, как я указал выше).

Изменено covobo (28.11.2016 23:58:20)

Не в сети

Подвал раздела