Komponenty są głównym budulcem aplikacji Yii. Komponenty to instancje klasy Component lub jej potomnych. Trzy główne funkcjonalności, które zapewniają komponenty innym klasom to:
Wszystkie razem i każda z tych funkcjonalności osobno zapewnia klasom Yii o wiele większą elastyczność i łatwość użycia. Dla przykładu, dołączony yii\jui\DatePicker, komponent interfejsu użytkownika, może być użyty w widoku, aby wygenerować interaktywny kalendarz:
use yii\jui\DatePicker;
echo DatePicker::widget([
'language' => 'pl',
'name' => 'country',
'clientOptions' => [
'dateFormat' => 'yy-mm-dd',
],
]);
Właściwości widżetu są w łatwy sposób konfigurowalne ponieważ jego klasa rozszerza Component.
Komponenty zapewniają duże możliwości, ale przez to są też bardziej zasobożerne od standardowych obiektów, ponieważ wymagają dodatkowej pamięci i czasu CPU dla wsparcia eventów i behaviorów w szczególności. Jeśli komponent nie wymaga tych dwóch funkcjonalności, należy rozważyć rozszerzenie jego klasy z BaseObject zamiast Component. Dzięki temu komponent będzie tak samo wydajny jak standardowy obiekt PHP, ale z dodatkowym wsparciem właściwości.
Rozszerzając klasę Component lub BaseObject, zalecane jest aby przestrzegać następującej konwencji:
$config
jako ostatni na liście jego argumentów i przekaż go do konstruktora rodzica.init()
rodzica na początku własnej implementacji metody init()
.Przykład:
<?php
namespace yii\components\MyClass;
use yii\base\BaseObject;
class MyClass extends BaseObject
{
public $prop1;
public $prop2;
public function __construct($param1, $param2, $config = [])
{
// ... inicjalizacja przed zaaplikowaniem konfiguracji
parent::__construct($config);
}
public function init()
{
parent::init();
// ... inicjalizacja po zaaplikowaniu konfiguracji
}
}
Postępowanie zgodnie z tymi zasadami zapewni konfigurowalność Twojego komponentu, kiedy już zostanie utworzony. Dla przykładu:
$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
// lub alternatywnie
$component = \Yii::createObject([
'class' => MyClass::className(),
'prop1' => 3,
'prop2' => 4,
], [1, 2]);
Informacja: Wersja z wywołaniem Yii::createObject() wygląda na bardziej skomplikowaną, ale jest o wiele wydajniejsza, ponieważ jej implementację zapewnia kontener wstrzykiwania zależności.
Klasa BaseObject wymusza następujący cykl życia obiektu:
$config
. Konfiguracja może nadpisać domyślne wartości ustawione w konstruktorze.Pierwsze trzy kroki są w całości wykonywane w konstruktorze obiektu, co oznacza, że uzyskana instancja klasy jest już poprawnie zainicjowana i stabilna.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.