Работа с yii2. Начало.

Ильдар Сарибжанов | 28.02.2017

Предыстория

Целью на этот год у меня поставлена задача реализовать один проект на 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 реализовать необходимую структуру. Затем посмотрю как писать в БД и читать из БД. В общем, будет интересно! Следите за обновлениями =)

Полезные ссылки

Собственно все основные идеи брал отсюда