Окт 22

Очень часто разработчик встречается с проблемой неверного отображения символов на странице (всегда используйте только UTF-8!). Причин тому может быть несколько. В общем случае на это влияют следующие факторы:

Проблемы с базой данных

1) База должна быть создана с такими параметрами:

charset - utf8

collation - utf8_general_ci

2) Текстовые поля в таблицах также должны иметь charset  utf8 и collation  utf8_general_ci

Проблемы с кодировкой файлов

Каждый файл сохраняйте в UTF-8 кодировке (ну и с Unix переносами строк, естественно :-)

Кодировка в Symfony

В symfony все просто - в файле databases.yml указываем кодировку, например:

all:
  propel:
    class:      sfPropelDatabase
    param:
      phptype:  mysql
      host:     localhost
      database: the
      username: root
      password: 123
      encoding: utf8
Сен 12

Вот наткнулся на такое, позор! phpclasses.org не знает как правильно пишется Symfony!

Стыдно товарищи, стыдно!

Май 13
Symfony
icon1 Snowcore | icon2 php | icon4 05 13th, 2008| icon35 Comments »

Первым делом хочу поблагодарить своего коллегу YS-PRO за то, что он поведал мне об этом замечательном фреймворке (и за книгу “Definitive guide to symfony”).

Symfony - отлично продуманный и легкий в изучении фреймворк. Написан исключительно на PHP5. Он создан для быстрого создания веб приложений (большинство работы symfony сделает за Вас ;-) Не полный список преимуществ:

- простая установка и стабильная работа в Windows и *nix системах
- независимость от базы данных (поддерживаются MySQL, PostgreSQL, MS-SQL, SQLite, Oracle) - используется ORM (Propel + Creole)
- представление состоит из шаблонов и layouts, которые могут быть созданы дизайнерами без знания symfony

- поддержка автоматизированной валидации форм
- автоматическая очистка пользовательского ввода (для избежания SQL инъекций и XSS аттак)
- ЧПУ (человеко понятные урлы)
- Работа с Ajax, средства для постраничного вывода списков, их фильтрации и сортировки
- автоматизация создания административной части

Что ж, попробуем symfony на своем локальном Apache.

Скачать symfony можно здесь: http://www.symfony-project.org/content/download
Затем распаковываем архив на свой локальный сервер.

Большинство действий выполняются из командной строки при помощи утилиты symfony (/data/bin/symfony.bat). Так что сразу добавим ее в путь поиска Windows (PATH). Идем в Система->Свойства->Дополнительно->Переменные среды и добавляем путь к symfony.bat в переменную PATH.

Теперь создадим проект. Для этого добавляем пустую директорию (например helloSymfony) в корень symfony. Из коммандной строки вызываем symfony init-project helloSymfony (все комманды нужно вызывать из корневого каталога вашего проекта). Symfony создаст следующее дерево каталогов:

apps/
batch/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/

Пожалуй, самой важной директорией для нас является apps - она предназначена для всех приложений проекта.
Следующий шаг - создание приложения (проект должен состоять хотя бы из одного приложения):

symfony init-app helloSymfonyApp

Symfony создаст такую структуру директорий:

apps/
helloSymfonyApp/
config/
i18n/
lib/
modules/
templates/
web/
index.php
helloSymfonyApp_dev.php

Теперь нам нужно сконфигурировать сервер. Делаем доступной для пользователя папку web (это будет корнем нашего сайта) - добавляем VirtualHost hello.
Здесь index.php - точка входа (Front Controller), а helloSymfonyApp_dev.php - точка входа для разработчика (symfony предоставляет средства отладки).

Приложение состоит из модулей (страниц). Добавим страницу home в наше приложение helloSymfonyApp:

symfony init-module helloSymfonyApp home

В следствии чего добавляется еще несколько директорий для модуля ;-)
Самым интересным здесь является сгенерированный класс в actions/actions.class.php

class homeActions extends sfActions
{
  public function executeIndex()
  {
    $this->forward('default', 'module'); // использование стандартного шаблона
  }
}

Это - сердце нашей страницы home - контроллер. Он выполняет некоторые действия (определяет данные для представления) и передает управление шаблону (представлению).
В кратце: каждый метод, начинающийся с executeЧТО-ТО передает управление шаблону под именем ЧТО-ТОSuccess.php, который находится в папке templates данного модуля (о других типах методов и шаблонов расскажу позже).

Теперь попросим symfony поприветствовать нас. Добавим новый метод в homeActions:

public function executeSayHello()
{
  $this->name = 'Geek';
  $this->date('d/m/Y');
}

Чтобы отобразить приветствие создаем шаблон sayHelloSuccess.php (в папке templates):

Symfony says: Hello,

Today’s date is

(смотрим в браузере http://hello/helloSymfonyApp_dev.php/home/sayHello/ )

Как видите, все очень просто: в контроллере мы задаем переменную как $this->имя_переменной, а в представлении она доступна, как обычная переменная.

To be continued… ;-)