Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Best in symfony (изучаем возможности фреймворка symfony) Первые шаги, создадим проект


Начнем осваивать фреймворк symfony.

В начале скачаем последний релиз движка symfony со страницы http://www.symfony-project.org/installation/1_4

На момент написания актуальна версия 1.4.6, ее и возьму.

Создадим директорию на диске в которой будет находится проект.

У меня эта директория  d:\start_project\

Разархивируем скачанный архив в этой директории. В итоге получим папку d:\start_project\symfony-1.4.6 с множеством файлов и директорий фреймфорка которые не подлежат изменению.

Теперь перед нами стоит задача сделать возможным запуск консольных команд symfony.

Скопируем два файла (symfony и symfony.bat) из директории d:\start_project\symfony-1.4.6\data\bin\ в корневую папку будущего проекта т.е. в d:\start_project\

Затем открываем файл symfony.bat и подправим на всякий случай путь к php интерпретатору, у меня это денверовский путь к виртуальному диску. Заменим все содержимое на следующее

 @echo off

set PHP_COMMAND=z:\usr\bin\php5.exe

%PHP_COMMAND% "sf" %*

Путь у вас может быть свой.

Затем изменим имена файлов symfony.bat и symfony на sf.bat и sf, это делаю для того чтоб в последствии симфони не думала что раз она находит эти файлы в директории то и проект там тоже есть. Да и короче команда, меньше набирать.

 

Попробуем запустить команду sf из консоли папки d:\start_project\,

Для этого я перехожу в эту папку и перехожу в консоль, где набираю sf и давлю ентер.

Получим ошибку:

 

<br />

<b>Fatal error</b>:  Uncaught exception 'Exception' with message 'Una

 symfony libraries' in D:\start_project\symfony:32

Stack trace:

#0 {main}

  thrown in <b>D:\start_project\sf</b> on line <b>32</b><br />

 

Это означает что симфони не может найти библиотеки, в чем мы ей поможем.

Заменим все содержимое файла sf на следующее

#!/usr/bin/env php

<?php

$dir = 'd:/start_project/symfony-1.4.6/lib/';

include($dir.'/command/cli.php');

?>

Пробуем опять команду symfony и получаем хелп по фреймворку где описаны все команды

#!/usr/bin/env php

<?php

 

D:\start_project>symfony

Usage:

  symfony [options] task_name [arguments]

 

Options:

  --help                   -H  Display this help message.

  --quiet                  -q  Do not log messages to standard output.

  --trace                  -t  Turn on invoke/execute tracing, enable full backt

race.

  --version                -V  Display the program version.

  --color                      Forces ANSI color output.

  --xml                        To output help as XML

 

Available tasks:

  :help               Displays help for a task

  :list               Lists tasks

app

  :routes             Displays current routes for an application

cache

  :clear              Clears the cache (cc)

configure

  :author             Configure project author

generate

  :app                Generates a new application

  :module             Generates a new module

  :project            Generates a new project

  :task               Creates a skeleton class for a new task

i18n

  :extract            Extracts i18n strings from php files

  :find               Finds non "i18n ready" strings in an application

log

  :clear              Clears log files

  :rotate             Rotates an application's log files

plugin

  :add-channel        Add a new PEAR channel

  :install            Installs a plugin

  :list               Lists installed plugins

  :publish-assets     Publishes web assets for all plugins

  :uninstall          Uninstalls a plugin

  :upgrade            Upgrades a plugin

project

  :clear-controllers  Clears all non production environment controllers

  :deploy             Deploys a project to another server

  :disable            Disables an application in a given environment

  :enable             Enables an application in a given environment

  :optimize           Optimizes a project for better performance

  :permissions        Fixes symfony directory permissions

  :send-emails        Sends emails stored in a queue

  :validate           Finds deprecated usage in a project

symfony

  :test               Launches the symfony test suite

test

  :all                Launches all tests

  :coverage           Outputs test code coverage

  :functional         Launches functional tests

  :unit               Launches unit tests

 

Попробуем сгенерировать проект командой sf generate:project start_project

Получаем отчет о созданных каталогах проекта

 

D:\start_project>sf generate:project start_project

>> dir+      D:\start_project\apps

>> dir+      D:\start_project\cache

…… пропущено ….

>> file+     D:\start_project\config/ProjectConfiguration.class.php

>> file+     D:\start_project\config/properties.ini

>> file+     D:\start_project\config/rsync_exclude.txt

>> dir+      D:\start_project\data

>> dir+      D:\start_project\data/fixtures

 

Затем генерируем приложение в проекте

 

sf  generate:app frontend

В результате видим процесс создания структуры каталогов и файлов приложения.

 

D:\start_project>sf  generate:app frontend

>> dir+      D:\start_project\apps/frontend\config

>> file+     D:\start_project\apps/frontend\config/app.yml

>> chmod 777 D:\start_project\log

…пропущено…..

>> chmod 777 D:\start_project/symfony

>> chmod 777 D:/start_project/web/uploads/assets

>> dir+      D:\start_project\test/functional/frontend

 

После создания приложения в папке web был создан файл index.php, который является входным для сайта и называется фронт-контроллером.

Теперь остается направить веб сервер на веб каталог d:\start_project\web\

Я это делаю добавив виртуальный хост в файле z:\usr\local\apache\conf\ httpd.conf

 

Listen 9106

<VirtualHost *:9106>

  DocumentRoot "d:/start_project/web/"

  DirectoryIndex index.php

  <Directory "d:/start_project/web/">

    AllowOverride All

    Allow from All

  </Directory>

</VirtualHost>

 

После перегрузки сервера по адресу http://localhost:9106/ вы должны видеть приветствие Symfony Project Created

Чтобы подключить стили к странице я копирую папку d:\start_project\symfony-1.4.6\data\web\sf\ в директорию  d:\start_project\web\

 

После этого вы должны увидеть стилизированное приветствие.

По адресу http://localhost:9106/frontend_dev.php вы видите работу сайта в режиме разработки, который отличается присутствием дебаг панели в правом верхнем углу и более подробным выводом ошибок, если таковые имеются. Рекомендую при разработке пользоваться именно этим режимом.

 

Сейчас корневая страница сайта ведет на дефолтовый модуль фреймвокра, создадим свою главную страницу сайта. Для этого откроим файл роутинга

d:\start_project\apps\frontend\config\routing.yml

И изменим

homepage:

  url:   /

  param: { module: default, action: index }

на

homepage:

  url:   /

  param: { module: mainpage, action: index }

 

Этими изменениями мы говорим о том что если в url ничего не содержится, т.е. браузер попадает в корень сайта, то приложение перенаправляется на модуль mainpage и действие (action) index.

После обновления страницы http://localhost:9106/frontend_dev.php мы увидим ошибку

Action "mainpage/index" does not exist. Что говорит о необходимости создания модуля mainpage.

Давайте создадим его из консоли набрав команду

sf generate:module frontend mainpage

При этом нужно находится в каталоге проекта. Если команда выполнилась корректно, на экране должно быть примерно следующее

D:\start_project>sf generate:module frontend mainpage

>> dir+      D:\start_project\apps\frontend\modules/mainpage\actions

>> file+     D:\start_project\apps\frontend\...npage\actions/actions.class.php

>> dir+      D:\start_project\apps\frontend\modules/mainpage\templates

>> file+     D:\start_project\apps\frontend\...page\templates/indexSuccess.php

>> file+     D:\start_project\test/functiona...rontend/mainpageActionsTest.php

>> tokens    D:\start_project\test/functiona...rontend\mainpageActionsTest.php

>> tokens    D:/start_project/apps/frontend/...npage/actions/actions.class.php

>> tokens    D:/start_project/apps/frontend/...page/templates/indexSuccess.php

А при обновлении страницы http://localhost:9106/frontend_dev.php  мы должны увидеть приветствие нового модуля

Так как в процессе разработки на symfony мы будем довольно часто использовать одни и те же консольные команды я считаю целесообразным заготовить пакетные bat файлы для запуска с параметрами.
Создадим
bat файл  new module [app name, module name].bat в названии которого будет находится подсказка о том как им пользоваться. В сожержимое этого файла вставляем следующее:

php sf generate:module %1 %2

Теперь мы можем довольно быстро создавать новые пустые модули вызывая этот батник с двумя параметрами, первый – имя приложения, второй – имя модуля. Я рекомендую называть модули с маленькой буквы чтоб избежать нюансов с регистром в
url в linux системах.

Итак после создания пустого модуля по умолчанию он содержит одно действие и один шаблон. В данном случае это модуль mainpage и действие index. Откроем файл
d:\start_project\apps\frontend\modules\mainpage\actions\actions.class.php
там мы увидим следующее:

class mainpageActions extends sfActions

{

  public function executeIndex(sfWebRequest $request)

  {

    $this->forward('default', 'module');

  }

}

Из этого кода видно что нас перенаправляют на «заглушку» symfony в строке $this->forward('default', 'module'); уберем эту строку и обновим страницу.

После этого вы должны увидеть чистую страницу – результат загрузки пустого шаблона по пути d:\start_project\apps\frontend\modules\mainpage\templates\indexSuccess.php. Если бы он содержал html код, то он был бы на странице.

 

Создадим еще несколько полезных в работе bat файлов

 

Очистка кеша

Файл: d:\start_project\cc.bat

Содержимое:

php sf cc

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

 

Перегенерация модели

Файл: d:\start_project\build_all.bat

Содержимое:

sf cc

sf doctrine:clean-model-files

sf doctrine:build --all --no-confirmation

sf doctrine:data-load

 

Этот набор команд будет использован наиболее часто. Необходимость в запуске этого батника появляется кажды раз, когда изменяется структура базы данных a файле схемы.

При выполнении этих команд происходит переформирование классов модели и форм, ответственных за работу с базой данных.


В избранное