Урок 1. Знакомство с XAMPP и Yii2: установка, введение в контроллеры и представления
Давайте попробуем поближе познакомиться с популярным фреймворком Yii2. Самый, пожалуй, простой способ (для меня лично) – это либо через композер установить на каком-то удалённом рабочем сервере, либо же развернуть на своем компьютере в виртуальной машине (с ОС Ubuntu, к примеру). Однако, если уж мы решили исследовать новую технологию, то давайте будем делать это на новом месте – заодно познакомимся и с XAMPP.
XAMPP качаем с официального сайт и ставим куда-нибудь в корень какого-нибудь диска (как предписывает инструкция, чтобы не было проблем с ограничениями путей Windows). После установки и запуска у меня XAMPP выдал предупреждение, что MySQL не будет работать, так как порт 3306 занят (у меня уже стоит какая-то версия мускуля, необходима для других проектов) – так что пришлось прописать в конфигах 3307 и создать другую службу:
sc create mysqlweb binPath= "d:\xampp\mysql\bin\mysqld.exe --defaults-file = D:\xampp\mysql\bin\my.ini mysqlweb"Но база нам пока и не нужна. Запускаем просто апач, переходим по адресу локалхост в браузере и видм, что XAMPP запустился – прекрасно. Теперь все удаляем из папки htdocs и заливаем туда скачанный архив Yii2 базовый. Меняем cookieValidationKey из файла D:\xampp\htdocs\config\ web.php и пробуем открыть по адресу http://localhost/web/
Отлично. Мы успешно установили фреймворк Yii2. Давайте начнем работать с ним, чтобы посмотреть, что мы можем сделать.
Дополнительная настройка
В нашем config/web.php давайте включим prettyUrl. Прокрутите вниз, пока не увидите пример кода ниже, и раскомментируйте его
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ],Приложение Hello World
Давайте создадим наше первое приложение hello world. На самом деле controllers/SiteController.php файл позволяет добавить код ниже
public function actionHello(){ echo "Hello World"; }Результат на странице http://localhost/web/site/hello
В yii префикс action в функции контроллера становится маршрутом. Поэтому, если нам понадобится actionHelloWorld(), наш маршрут будет таким http://localhost/web/site/helloworld. Имейте это в виду.
Вот и все, мы создали наше первое приложение hello world.
Каталоги приложения
Список каталогов yii показан ниже. В веб-папке есть загрузчик index.php файл, в котором вам нужно указать свою конфигурацию.
- yii/ базовый путь приложения
- composer.json, используемый Composer, описывает информацию о пакете
- config/ содержит приложение и другие конфигурации
- console.php конфигурация консольного приложения
- web.php команды конфигурации веб-приложения
- commands/ - консольные классы команд
- controllers/ содержит классы контроллеров
- models/ содержит классы моделей
- runtime/ содержит файлы, созданные Yii во время выполнения, такие как журналы и файлы кэша
- vendor / содержит установленные пакеты Composer, включая сам фреймворк Yii
- views/ содержит файлы представлений
- web/ application Web root, содержит файлы, доступные через Интернет
- assets/ файлы ресурсов (JavaScript и CSS) в Yii
- index.php скрипт ввода (или начальной загрузки) для приложения Yii
Контроллеры в MVC-приложениях являются связующим звеном между нашими представлениями и нашими моделями данных.
Давайте посмотрим, что мы можем сделать с контроллерами в yii2.
Простая маршрутизация
В нашем SiteController.php давайте создадим еще один простой маршрут. Мы можем получить доступ к этому маршруту через site/help
public function actionHelp(){ echo "Это страница помощи"; }Если бы мы создали функцию в контроллере с именем Dashboard.php маршрут был бы таким dashboard/help.
Создание новой базы маршруту пути
Давайте создадим контроллер панели мониторинга. В каталоге контроллеров появился новый файл с именем DashboardController.php и внутри него добавьте следующий код
<?php namespace app\controllers; use yii\web\Controller; class DashboardController extends Controller { }Теперь мы можем добавить наш маршрут help к контроллеру.
class DashboardController extends Controller { public function actionHelp(){ echo "Это страница помощи 2"; } }Давайте проверим маршрут по адресу http://localhost/web/dashboard/help
Передача параметров в адрес
В нашем справочном маршруте в SiteController мы хотим получить и идентификатор из строки запроса, чтобы могли кое-что сделать:
public function actionHelp( $id="" ){ if($id){ echo "this is a help page with id ". $id; }else{ echo "this is a help page"; } }Перенаправление страницы
Давайте посмотрим, как мы можем перенаправить с одного маршрута на другой. В нашем Справочном маршруте SiteController мы пойдем по справочному маршруту DashboardController.
public function actionHelp(){ $this->redirect('/web/dashboard/help'); }Вот и наша страница должна быть перенаправлена.
Отображение представления (вьюшки)
Давайте посмотрим, как мы можем визуализировать файл представления. В нашем каталоге views/site мы создадим простое представление под названием faq.php.
Давайте создадим faq.php файл. Мы можем хранить здесь любые часто задаваемые вопросы.
В нашем /views/site/faq.php файл добавим код ниже.
<?php echo "<h1>My Faq Page</h1>"; ?> <p>Hello this is the FAQ page</p>Теперь в нашем SiteController нам нужно создать новый маршрут. Давайте назовем его faq.
// Create the faq route public function actionFaq(){ }Чтобы получить наш faq.php файл для рендеринга, нам нужно вызвать рендеринг с помощью функции route.
public function actionFaq(){ return $this->render('faq'); }Теперь мы можем видеть результат.
Передача данных в представления
Мы можем передавать данные от нашего контроллера к нашим представлениям. Мы обычно передаем наши модели данных таким образом.
Давайте создадим список вопросов.
public function actionFaq(){ $questions = [ 'How hard is yii2', 'What will you need to start development', 'Is PHP easy to learn' ]; return $this->render('faq'); }Теперь мы можем передать $questions и получить доступ к нему в нашем faq.php вид. Мы делаем следующее.
public function actionFaq(){ $questions = [ 'How hard is yii2', 'What will you need to start development', 'Is PHP easy to learn' ]; return $this->render('faq',['questions'=>$questions]); // отправляем данные }Функция render принимает массив в качестве второго аргумента. Данные в этом массиве передаются в наше представление. В нашем faq.php файл мы можем обновить макет:
<?php echo "<h1>My Faq Page</h1>"; ?> <p>Hello this is the FAQ page</p> <p>The list of questions is below</p> <ul> <?Php foreach($questions as $question):?> <li><?php echo $question;?></li> <?php endforeach; ?> </ul>Результат:
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.