MyTetra Share
Делитесь знаниями!
Краткая справка по фреймверку Yii2 - Оформление контроллеров, видов, моделей
Время создания: 05.08.2017 23:00
Автор: Xintrea
Текстовые метки: фреймверк, Yii2, основы, документация, справка, модель, вид, контроллер
Раздел: Компьютер - Программирование - Язык PHP - Yii2
Запись: xintrea/mytetra_syncro/master/base/1501963238xdua4ogo1d/text.html на raw.github.com

Эту справку я пишу для себя, чтобы быстро вспоминать как устроен фреймверк Yii2.



Как формируется URL, где прописывается контроллер и экшен


Пример URL (пока без ЧПУ):


mysite.local/web/index.php?r=site/hello


здесь:


  • site - это имя контроллера
  • hello - имя экшена



Как формируется класс контроллера, как оформляется экшен


Файл контроллера должен располагаться и называться так (относительно корня сайта):


/controllers/SiteController.php


Класс контроллера унаследуется от стандартного класса контролллера. Поэтому, в php-файле контроллера обычно прописывается следующее пространство имен и следующие используемые определения (необходимый минимум):


namespace app\controllers;

use yii\web\Controller;


В файле SiteController.php должен быть класс контроллера, определение которого выглядит так:


class SiteController extends Controller

{

...

}


Экшен - это публичный метод контроллера. Его определение выглядит так:


public function actionHello()

{

...

}


Или, если метод принимает параметр, то описание метода принимает такой вид:


public function actionHello($message='')

{

...

}


О том, как передавать значение в параметр метода, написано чуть ниже.





Как вызывается вид (view)


Если приложение сайта построено на стандартном (basic) примере, то сайт работает на основе одного main-шаблона (layout). То есть, для всех страниц сайта применяется один и тот же шаблон. И экшен вставляет результат своей работы в одно и то же место основного шаблона (обычно через печать переменной content).


Внутра экшена, генерация содержимого страницы происходит через метод render():


public function actionHello($message='')

{

return $this->render('hello',

['message'=$message]);

}


Где:


  • 'hello' - это имя вида. И файл вида находится здесь: /views/site/hello.php
  • массив [] - это передача параметров вовнутрь вида


Следует обратить внимание, что у одного контроллера практически всегда несколько экшенов, и соответственно для каждого экшена обычно используется отдельный вид. Поэтому фреймверк требует, чтобы виды помещались в отдельный каталог, имя которого соответствует имени контроллера (с маленькой буквы), в данном случае это каталог /views/site.



Как передается параметр в контроллер


Параметр в контроллер можно передать через URL. Выглядит это так:


mysite.local/web/index.php?r=site/hello&message=Hi


Кстати, если нужно передать строковый параметр с пробелом, можно воспользоваться синтаксисом с плюсиком:


mysite.local/web/index.php?r=site/hello&message=Hi+guys


Внимание! При любом виде передачи параметра от пользователя (Get/Post/Socket...), нельзя его использовать в явном виде без предварительной проверки и фильтрации, чтобы пользователь не смог совершать атаки типа SQL-инъекции, не мог внедрить JavaScrip в чистом виде для межсайтового скриптинга (XSS) и т. д.



Как создается класс модели


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


  • для сокрытия работы с таблицами баз данных (так воспринимать модель некорректно, но обычно на физическом уровне модель именно это и делает)
  • для реализации форм


Файлы моделей располагаются в каталоге /models.


Пример класса модели:


namespace app\models;


use Yii;

use yii\base\Model;


class ContactForm extends Model

{

public $name;

public $email;


...

}



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования