Работа с yii2. Начало.
Предыстория
Целью на этот год у меня поставлена задача реализовать один проект на framework’е. Не уточнялось на каком, и даже язык не уточнялся. Но для себя я решил, что это должен быть какой-нибудь совсем нетроганный мной зверь. Исходя из поставленной задачи выбор пал на Yii второй генерации, все-таки надо придерживаться свежих веяний, и, думаю, что первая версия будет еще не долго поддерживаться.
Допустим инструмент выбран, что дальше? Нужна какая-то прикладная задача. Тренировка на кошках ничего не даст.
В нашей семье для учета доходов и расходов мы используем excel, думаю, многие так делают, это просто и достаточно удобно. Но у такого подхода есть некоторые недостатки, и вот один из них, который меня сильно удручает: очень много телодвижений, чтобы получить какую-либо статистику. Тем более, что я записываю каждую позицию в расходах, пришел из гипермаркета и 20 минут переписываешь из чека в эксель, а чтобы потом посчитать сколько потрачено на питание, это еще мильён времени, чтобы все сложить и постараться ничего не потерять. Думаю, задачу вы уже уловили =) Хочу сервис, в котором можно так же удобно забивать расходы, но который позволит выводить любую мыслимую статистику: расходы за месяц, траты на развлечения, траты на кино, траты на кино за 4 недели — т.е. действительно любую статистику.
Так как я не умею готовить yii, то данная часть будет рассчитана «для самых маленьких».
Установка
Я живу в мире php, поэтому не вижу смысле не использовать крутые вещи этого мира. Я говорю про composer. Не будем далеко уходить в сторону, представим, что он у вас уже установлен и настроен в глобальное окружение, чтобы не писать каждый раз страшную конструкцию
php composer.phar
Теперь по мануалу, нужно глобально установить пакет composer-asset-plugin. Этот пакет нужен, чтобы управлять пакетами, которые написаны для Bower и Npm. Т.е. теперь композер умеет переваривать пакеты для Bower и Npm, и вроде бы как не обязательно дополнительно устанавливать сами Bower и Npm. Как-то так, путано, но понятно =)
composer global require "fxp/composer-asset-plugin:^1.2.0"
И непосредственно установка. Во всех примерах почему-то фигурирует такая команда
composer create-project --prefer-dist yiisoft/yii2-app-basic [path-project]
С вариантами в качестве [path-project]. Но лично я сначала создаю папку под проект, потом перехожу в нее и уже все манипуляции делаю из нее. Собственно чтобы установить yii в текущую папку нужно писать так
composer create-project --prefer-dist yiisoft/yii2-app-basic ./
Получаем вот такую структуру
Теперь надо чтобы наш веб-сервер смотрел на папку /web. Т.к. у меня локально поднят Apache, то в настройках хостов у меня настроено вот так
<VirtualHost *:80> ServerName finansomer.my ServerAlias www.finansomer.my DocumentRoot [path-to-web-server]/finansomer.my/web </VirtualHost>
Как видно из настроек, имя папки соответствует имени домена, мне так нравится. Но для начала настроим сервер на корень проекта и откроем в браузере адрес finansomer.my/requirements.php, чтобы посмотреть все ли нашему yii нравиться в нашей конфигурации. Если чего-то не хватает, добавим, если все ок, снова настроим сервер на /web. Мне, чтобы оставить минимум warning’ов понадобилось поставить пакет intl и imagick. Из предупреждений я оставил только драйвера для SQLite и PostgreSQL, а также модуль Memcache. Пока это все мне не нужно.
Настройка Git репозитория
Перед инициализацией git-репозитория надо бы настроить gitignore. Как видно, в корне он уже лежит, но умные люди предлагают его немного дополнить. А я еще скажу, что можно убрать не нужные строки, например, там указаны папки для IDE. Я работаю в PhpStorm и поэтому оставлю в исключениях только его папки, другие удалю. Так вот, в корневой gitignore надо добавить файл yii из корня, видимо, это какой-то входной скрипт для консоли, позже с этим разберемся. Коневой gitignore я получил такой
# phpstorm project files .idea # windows thumbnail cache Thumbs.db # composer vendor dir /vendor /yii # phpunit itself is not needed phpunit.phar # local phpunit config /phpunit.xml tests/_output/* tests/_support/_generated
Еще говорят, что в папки /config и /web надо тоже положить по гитигнору с таким содержимым: в первом
db.php params.php
что логично, там будут настройки базы и параметры конфигурации, не очень хорошо, чтобы они валялись в репе. А во втором так
index.php index-test.php .htaccess
На счет htaccess может и соглашусь, а вот про индексы, хмм.. Ну раз рекомендуют сделаю, убрать из исключений можно всегда.
И вот можно выполнить заветную команду инициализации приложения
git init gitt add * gitt commit -m 'Start project'
Настройка ЧПУ. Красивые URL
Для ЧПУ, надо положить в папку /web htaccess с таким содержимым:
Order Allow,Deny Allow from all AddDefaultCharset utf-8 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
И пожалуй этот файл я все же добавлю в индексацию, почему его исключили, мне не понятно.
А теперь нужно рассказать фрэймворку, что он должен делать ссылки красивыми, это тоже не сложно, нужно в 2 файла config/console.php и config/web.php в секцию components добавить следующее:
'components' => [ ... 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ '<_c:[\w\-]+>/<id:\d+>' => '<_c>/view', '<_c:[\w\-]+>' => '<_c>/index', '<_c:[\w\-]+>/<_a:[\w\-]+>/<id:\d+>' => '<_c>/<_a>', ], ], ],
Коммитим изменения, отправляем все в удаленный репозиторий и смотрим в браузере что у нас получилось. Ну вот я и развернул yii. На самом деле это не первая моя попытка установки, более того все они были успешными, но дальше установки ничего не шло, а теперь есть стимул продолжить работу.
Что дальше?
В следующих частях я подумаю над структурой базы данных, посмотрю как в рамках Yii реализовать необходимую структуру. Затем посмотрю как писать в БД и читать из БД. В общем, будет интересно! Следите за обновлениями =)