Вот пару дней назад начал изучать yii2, все вроде бы и понятно. Самая большая проблема связана с использованием уже готовых методов, которых полно в yii2. Приведу простой пример с выводом формы. Скидываю файлик ВИД. Для вывода файла нужен класс ActiveForm, который, мы и подключаем, но для использования label() а также textarea() нужен класс ActiveField. Мы его НЕ подключаем, но все равно все работает, ПОЧЕМУ?? PHP: <?php use yii\widgets\ActiveForm; use yii\helpers\Html; ?> <h1>Test Action</h1> <?php $form = ActiveForm::begin() ?> <?= $form->field($model, 'name')->label('Имя') ?> <?= $form->field($model, 'email') ?> <?= $form->field($model, 'text')->label('Текст сообщения')->textarea(['rows' => 10]) ?> <?= Html::submitButton('Отправить', ['class' => 'btn btn-success']) ?> <?php ActiveForm::end() ?>
http://www.yiiframework.com/doc-2.0/guide-input-forms.html Строка 57, читай код Yii2, там всё понятно. https://github.com/yiisoft/yii2/blob/master/framework/widgets/ActiveForm.php#L57 Внутри метода класса, можно обратится к другому классу, просто у него будет другая область видимости, внутри этого метода, но там идут ещё дальше и передают уже в другой класс расположение(namespace) этого ActiveFileld, ты используешь use yii\helpers\Html; чтобы к Html классу обращаться по его имени или для возможности дать ему псевдоним, если класс Html уже загружен, но без использования use ты можешь обращаться так \yii\helpers\Html::encode($user->name) без сокращения, а по полному пути. Так что перечитай ещё про use и подумай, как он помогает если у тебя на странице будет 2-3 класса с именем Html хоть и в разных пакетах. Они все могут быть подключены как только ты к ним обратишься, этим займётся composer -> авто загрузка классов. Так что мы обращаемся к любому классу, потом composer по PSR-4 ищет их на диске и пытается подключить, вот так, подключает только если к нему обратились и он есть. --- Добавлено --- Автоматическая загрузка классов https://secure.php.net/manual/ru/language.oop5.autoload.php http://www.php-fig.org/psr/psr-4/ http://www.php-fig.org/psr/psr-4/examples/
Хорошо, я понял. Значит подключенный нами виджет ActiveForm имеет публичное свойство, которое и импортирует ActiveField Код (Text): public $fieldClass = 'yii\widgets\ActiveField'; И теперь мы смело можем пользоваться его методами, если я все правильно понял. Но как об этом всем можно знать? Возможно, опытным разработчикам все эти классы упрощают жизнь, но мне, как человеку, который никогда ранее не изучал фреймворки, они все только усложняют. Как мне знать, что у этого класса есть свойство, там оно подключает другой класс и т д, если этих классов куча, а свойств и методов у них тысячи... =)
Нет, просто метод ActiveForm::field() возвращает экземпляр класса ActiveField, к методу label которого мы дальше обращаемся. Вам необходимо вернуться назад и прочитать ещё раз про классы и объекты в PHP, иначе вы ничего не поймёте. Yii2 использует практически все возможности, предоставляемые PHP, включая создание экземпляров классов, имена которых хранятся в строковых переменных. И надо всё это понимать прежде чем начинать разбирать любой современный фреймворк Свойство, которое вы привели, позволяет вам заменить стандартный ActiveField на свой собственный, что бывает необходимо, когда вам не подходит стандартная генерируемая вёрстка. А вообще, yii2 имеет прекрасную доку: http://yiiframework.com/doc-2.0/guide-index.html, http://yiiframework.domain-na.me/doc/guide/2.0/ru - почитайте на досуге
Читай документацию, вот документация по классу http://www.yiiframework.com/doc-2.0/yii-widgets-activeform.html Ну так нужно понять и запомнить очень много разных принципов по которым всё работает. Записывай все эти схемы в блокнотик, что так можно делать, ну ещё просто читай код, там же всё по коду понятно.