Size: a a a

2020 September 10

СП

Сергей Предводителев... in Yii Framework 3
Нужно довести до ума, чтобы в деве ребилд делался , а в проде нет
источник

AB

Alexander Borisov in Yii Framework 3
Dmitriy S
Я бы предпочел композицию наследованию. Выносим все популярные штуки в сервис контроллера. В экшине пишем
$this->service->redirectToRoute('blog/index');
$this->service->addFlash('success', 'Post saved');
$this->service->getUser()->getId();

и т.д.
всяко лучше, чем то что сейчас. в симфони там trait с хелперами + setContainer, чтобы конструктор чистым оставался
источник

NO

Nex Otaku in Yii Framework 3
Сергей Предводителев
Нужно довести до ума, чтобы в деве ребилд делался , а в проде нет
Нет необходимости ни в билде, ни в ребилде. Просто каждый раз собирать конфиг и не кешить никуда.
источник

СП

Сергей Предводителев... in Yii Framework 3
Дежавю :)
источник

DS

Dmitriy S in Yii Framework 3
Alexander Borisov
всяко лучше, чем то что сейчас. в симфони там trait с хелперами + setContainer, чтобы конструктор чистым оставался
Ну а у нас по факту в конструкторе будет только сервис
public functiom __construct(WebControllerService $service)
{
   $this->service = $service->withController($this);
}
источник

NO

Nex Otaku in Yii Framework 3
Пока не пофиксите, это всегда по кругу будет.
источник

СП

Сергей Предводителев... in Yii Framework 3
Правильно я понимаю, что в Yii2 контейнер работает как фабрика в Yii3 ?

В Yii2 (если в конфиге не задали синглтон):
Yii::$container->get(MyClass::class, ['a' => 42]);

В Yii3:
$factory->create(MyClass::class, ['a' => 42]);

Результат будет одинаковый. При каждом таком вызове что в Yii2, что в Yii3 будет создаваться новый экземпляр класса MyClass?
источник

AM

Alexander Makarov in Yii Framework 3
Сергей Предводителев
Правильно я понимаю, что в Yii2 контейнер работает как фабрика в Yii3 ?

В Yii2 (если в конфиге не задали синглтон):
Yii::$container->get(MyClass::class, ['a' => 42]);

В Yii3:
$factory->create(MyClass::class, ['a' => 42]);

Результат будет одинаковый. При каждом таком вызове что в Yii2, что в Yii3 будет создаваться новый экземпляр класса MyClass?
Да.
источник

СП

Сергей Предводителев... in Yii Framework 3
спасибо
источник

AB

Alexander Borisov in Yii Framework 3
точно? похоже что нет. MyClass::class кастуется в Reference::to а там в методе resolve вызывается $container->get($this->id)
источник

AB

Alexander Borisov in Yii Framework 3
а, вру
источник

AB

Alexander Borisov in Yii Framework 3
$factory->create(MyClass::class); - но вот такой вариант будет каждый раз одно и тоже выводить, если я правильно понял
источник

СП

Сергей Предводителев... in Yii Framework 3
Alexander Borisov
$factory->create(MyClass::class); - но вот такой вариант будет каждый раз одно и тоже выводить, если я правильно понял
Речь же об этом методе и идёт...
источник

AB

Alexander Borisov in Yii Framework 3
если параметры передать, то каждый раз заново будет билдеть, если нет - то будет вытаскивать значение из контейнера, каждый раз одно и тоже. но это теоретически
источник

СП

Сергей Предводителев... in Yii Framework 3
Alexander Borisov
если параметры передать, то каждый раз заново будет билдеть, если нет - то будет вытаскивать значение из контейнера, каждый раз одно и тоже. но это теоретически
фабрика в yii3 ?
источник

AB

Alexander Borisov in Yii Framework 3
да
источник

СП

Сергей Предводителев... in Yii Framework 3
хм, не логично вроде...  фабрика же должна всегда заново создавать.
Попробую сейас...
источник

AB

Alexander Borisov in Yii Framework 3
надо проверить на практике, я чисто по коду глянул
источник

СП

Сергей Предводителев... in Yii Framework 3
Alexander Borisov
надо проверить на практике, я чисто по коду глянул
Каждый раз новый возвращает, как и надо.

class A
{
   public int $x = 0;
}

$a1 = $factory->create(A::class);
$a1->x = 1;
$a2 = $factory->create(A::class);
var_dump($a1->x); // 1
var_dump($a2->x); // 0
источник

AB

Alexander Borisov in Yii Framework 3
Сергей Предводителев
Каждый раз новый возвращает, как и надо.

class A
{
   public int $x = 0;
}

$a1 = $factory->create(A::class);
$a1->x = 1;
$a2 = $factory->create(A::class);
var_dump($a1->x); // 1
var_dump($a2->x); // 0
Виноват, затупил. Не заметил, что FactoryInterface extends ContainerInterface
источник