За последние 24 часа нас посетили 17843 программиста и 1719 роботов. Сейчас ищут 873 программиста ...

Помогите разобраться с yii2, пожалуйста.

Тема в разделе "PHP для новичков", создана пользователем Alien_php, 6 авг 2016.

  1. Alien_php

    Alien_php Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    38
    Симпатии:
    1
    Вот пару дней назад начал изучать yii2, все вроде бы и понятно. Самая большая проблема связана с использованием уже готовых методов, которых полно в yii2. Приведу простой пример с выводом формы. Скидываю файлик ВИД. Для вывода файла нужен класс ActiveForm, который, мы и подключаем, но для использования label() а также textarea() нужен класс ActiveField. Мы его НЕ подключаем, но все равно все работает, ПОЧЕМУ??


    PHP:
    1. <?php
    2. use yii\widgets\ActiveForm;
    3. use yii\helpers\Html;
    4. ?>
    5.  
    6. <h1>Test Action</h1>
    7.  
    8. <?php $form = ActiveForm::begin()  ?>
    9. <?= $form->field($model, 'name')->label('Имя') ?>
    10. <?= $form->field($model, 'email') ?>
    11. <?= $form->field($model, 'text')->label('Текст сообщения')->textarea(['rows' => 10]) ?>
    12. <?= Html::submitButton('Отправить', ['class' => 'btn btn-success']) ?>
    13. <?php ActiveForm::end()  ?>
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Предупреждение за неформатированный код.
     
    denis01 нравится это.
  3. Alien_php

    Alien_php Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    38
    Симпатии:
    1
    ок ок, буду знать на будущее
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    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/
     
    Alien_php нравится это.
  5. Alien_php

    Alien_php Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    38
    Симпатии:
    1
    Хорошо, я понял. Значит подключенный нами виджет ActiveForm имеет публичное свойство, которое и импортирует
    ActiveField
    Код (Text):
    1. public $fieldClass = 'yii\widgets\ActiveField';
    И теперь мы смело можем пользоваться его методами, если я все правильно понял. Но как об этом всем можно знать? Возможно, опытным разработчикам все эти классы упрощают жизнь, но мне, как человеку, который никогда ранее не изучал фреймворки, они все только усложняют. Как мне знать, что у этого класса есть свойство, там оно подключает другой класс и т д, если этих классов куча, а свойств и методов у них тысячи... =)
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Нет, просто метод 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 - почитайте на досуге
     
    Alien_php нравится это.
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Читай документацию, вот документация по классу http://www.yiiframework.com/doc-2.0/yii-widgets-activeform.html

    Ну так нужно понять и запомнить очень много разных принципов по которым всё работает.


    Записывай все эти схемы в блокнотик, что так можно делать, ну ещё просто читай код, там же всё по коду понятно.
     
    Alien_php нравится это.
  8. Alien_php

    Alien_php Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    38
    Симпатии:
    1
    Спасибо вам, ребята, вы очень помогаете.