четверг, 23 июня 2016 г.

Symfony

Начал разбираться с симфони. Symfony - это php-framework (пхпфв), каркас сайта с большими возможностями, на базе которого
можно создать свой сайт с такими же возможностями и даже больше.
Цель - открыть для себя мир пхпфв, посмотреть как тут всё устроено на примере симфони. Познакомиться со вспомогательными технологиями типа Git, Composer, Twig, ORM, MVC.



Весь вебдев любит линукс, ну а я делаю всё на своём win7x64 - мне помогает OpenServer и PHP Storm. Проверяю в ФФ и Хроме.
Также редактирую в акел-паде, работаю с папками и файлами в тотале.
Вот и весь мой стек технологий.
Уроки посвящены Symfony 2.8.6 (у меня 2.8.7). Всего уроков 6. Это перевод на русский уроков англоязычного автора.
Уроки - из жанра "Туториал", очень подробные и пошаговые. Читаю и выполняю шаги дословно, мало понимая что происходит.
Поэтому случаются странные затыки и только чудо помогает мне преодолевать такие препятствия. Чувствую себя слепым, которого ведут за руку и только по запахам и отблескам можно понять, что мы движемся. А вот куда и почему именно тут надо поворачивать и именно сюда идти - это ещё пока далеко от меня.
Рад, что в последнее время кое-что начало проясняться, блики и отблески начали принимать некоторые формы.
Список затыков (по памяти, потому что изначально не записывал их, т.к. не думал, что их будет сильно много):
1
очень долго не мог понять, почему сайт выдаёт ошибку и ругается на фразу "::class," в строке
 $form = $this->createForm(EnquiryType::class, $enquiry);
хотя она явно фигурировала в руководстве. Встречал я её и в простом поиске гугла.
Спас stackoverflow, где сразу резюмировали, что версия php 5.4 не годится, хотя в требованиях к симфони написано 5.3
Долго лазил по настройкам шторма, чтобы вытравить php 5.4 и заменить на 5.6
Видимо, сделать это до конца не получилось, т.к. php вызывается в нескольких местах
(в запуске сервера app\console server:run; на закладке Terminal; ).
Я плюнул и тупо создал d:\OpenServer\domains\sym\php.bat с содержимым
call d:\OpenServer\modules\php\PHP-5.6\php.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
исключив тем самым вызов 5.4, когда будет вызываться просто php.exe
Аналогично поступил с гит d:\OpenServer\domains\sym\git.bat
d:\programs\Git\bin\git.exe  %1 %2 %3 %4 %5 %6 %7 %8 %9
С путями в винде беда. Можно бороться с этим с помощью переменных окружения %PATH%, можно через батники. Пока работает.
Итого, 5.4 зло. На сайте php.net сейчас активны 5.5.36, 5.6.22, 7.0.7. 6 версии нет в природе.
В результате пришлось обновить и версию апача с 2.2 на 2.4
Но на это всё много времени потерял.
2
Второй затык случился на третьем уроке, когда я прочитал заметку и влупил команду
$ php app/console doctrine:mapping:convert --namespace="Blogger\BlogBundle\Entity\Blog" yaml src/Blogger/BlogBundle/Resources/config/doctrine
После этого действительно создался файл Blogger.BlogBundle.Entity.Blog.orm.yml в этой папке.
Однако перестали выполняться разные команды, типа
php app/console doctrine:schema:create
Писалась ошибка
  [Doctrine\Common\Persistence\Mapping\MappingException]
  Class 'Blogger\BlogBundle\Entity\Blogger\BlogBundle\Entity\Blog' does not exist
Зато, удаляешь этот мелкий файл и вуаля, всё снова начинает работать.
Так и не разобрался в чём дело. Видимо, какие-то глюки с пространствами имён и тем, что слишком часто фигурируют слова Blogger и Blog
Видимо, наложение возникло и путь удвоился.

Что интересно:
1
Для нормальной работы сервера/сайта на симфони нужно не только запустить апач, потом php, потом mysql. Нужно ещё запустить
php app\console server:run
Это что-то вроде бесконечного цикла в винде:
$kernel = new AppKernel($env, $debug);
$application = new Application($kernel);
$application->run($input);
Только тогда сайт начнёт что-то там показывать.
2
В OpenServer есть пункт меню phppgadmin - браузерная админка для постгресса. Но к сожалению, она не работает.
Ваша инсталяция PHP не поддерживает PostgreSQL. Вам необходимо пересобрать PHP, используя параметр --with-pgsql для configure.
Перекомпилить php.exe что ли?
3
Использовать постгресс вместо mysql в уроках у меня не получилось. Вроде явно mysql не указывал, но всё равно после
php app/console doctrine:database:create
база создалась именно в mysql.
4
По какой-то причине мой местный айпишник кардинально поменялся от того, что был раньше.
Был 191.168.15.61 стал 169.254.97.50. Пинг подтверждает.
Придётся менять настройки.
------------
На хабр
1. Не помешает указать явно, что php 5.4 не подойдёт, несмотря на требования к симфони 2.8 (>=5.3.9) - ругается на "::class"
2. После создания Blogger.BlogBundle.Entity.Blog.orm.yml (см. заметку) команды php app/console перестают работать и начинают выдавать ошибку
 [Doctrine\Common\Persistence\Mapping\MappingException]
  Class 'Blogger\BlogBundle\Entity\Blogger\BlogBundle\Entity\Blog' does not exist
Пока файл не удалишь, ошибка не уходит.
Или команда не верная или что-то другое...
Спасибо за перевод уроков. Оказалось полезно для меня, новичка в php-fw.

Комментариев нет: