пятница, 29 февраля 2008 г.

Продолжаем строить Blog на Symfony

Модифицируем главный шаблон приложения layout.php


Открываем и редактируем главный шаблон приложения prod/apps/blog/templates/layout.php:


<div id="container" style="width:600px;margin:0 auto;border:1px solid grey;padding:10px">    
<div id="navigation" style="display:inline;float:right">
<ul>
<li><?php echo link_to('List of posts', 'post/list') ?></li>
<li><?php echo link_to('List of comments', 'comment/list') ?></li>
</ul>
</div>
<div id="title">
<h1><?php echo link_to('Мой дневник на symfony', '@homepage') ?></h1>
</div>
<div id="content" style="clear:right">
<?php echo $sf_data->getRaw('sf_content') ?>
</div>
</div>

Если уже готов дизайн, замените это на вашу структуру, положив изображения в prod/www/images, а css в prod/www/css.


Изменим служебную часть проекта, оазместив в конфигурационном файле prod/apps/blog/config/view.yml:


default:

   http_metas:

      content-type: text/html


metas:

   title: The best weblog ever

   robots: index, follow

   description: symfony project

   keywords: symfony, project

   language: en


stylesheets: [main]


javascripts: []


has_layout: on

layout: layout


Создаем главный модуль main:


c:\xampp\htdocs\prod> symfony init-module frontend main  

Редактируем prod/apps/blog/modules/main/actions/actions.class.php и убираем содержимое метода executeIndex():


public function executeIndex()  {  }   

Редактируем шаблон prod/apps/blog/modules/main/templates/indexSuccess.php, например так:



<h1>Привет. Вы можете оставить запись в моем личном дневнике</h1>
<p>Вы <?php echo rand(1000,5000) ?>-й посетитель на сегодня.</p>

Скажем symfony какое действие ей выполнять первым, отредактировав prod/apps/blog/config/routing.yml:


homepage:
url: /
param: { module: main, action: index }

Смотрим результат:


http://localhost/blog_dev.php/  

понедельник, 25 февраля 2008 г.

Строим Blog на Symfony

Имеем:

  1. установленный XAMPP на Windows в каталоге C;\xampp;
  2. развернут framework Symfony;
  3. Apache22 поднят на localhost:80;
  4. пользователем MySQL5 является root с паролем 123;
  5. в php поднят PEAR.

Хотим:
  1. Создать проект на Symfony;
  2. Создать приложение Blog в проекте.


Дальше идет вольный пересказ наставления, взятого с symfony-project.org.

Создаём проект prod

Создаём каталог С:\xampp\htdocs\prod

  1. cd С:\xampp\htdocs\prod
  2. С:\xampp\htdocs\prod> symfony init-project prod

Создаём приложение blog
  • С:\xampp\htdocs\prod> symfony init-app blog

Проектируем базу данных prod, содержащую две таблицы post и comment

  • Редактируем файл С:\xampp\htdocs\prod\config\schema.yml:


propel:
post:
id: ~
title: varchar(255)
excerpt: longvarchar
body: longvarchar
created_at: ~
comment:
id: ~
post_id: ~
author: varchar(255)
email: varchar(255)
body: longvarchar
created_at: ~

Генерим модель, т.е. class Post и class Comment, которые появятся в E:\xampp\htdocs\prod\lib\model

  • С:\xampp\htdocs\prod> symfony propel-build-model

Генерим базу данных

  • С:\xampp\htdocs\prod> symfony propel-build-sql

Получаем скрипт E:\xampp\htdocs\prod\data\sql\lib.model.schema.sql

SET FOREIGN_KEY_CHECKS = 0;

#-----------------------------------------------------------------------------
#-- post
#-----------------------------------------------------------------------------

DROP TABLE IF EXISTS `post`;


CREATE TABLE `post`
(
`id` INTEGER NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255),
`excerpt` TEXT,
`body` TEXT,
`created_at` DATETIME,
PRIMARY KEY (`id`)
)Type=MyISAM;

#-----------------------------------------------------------------------------
#-- comment
#-----------------------------------------------------------------------------

DROP TABLE IF EXISTS `comment`;


CREATE TABLE `comment`
(
`id` INTEGER NOT NULL AUTO_INCREMENT,
`post_id` INTEGER,
`author` VARCHAR(255),
`email` VARCHAR(255),
`body` TEXT,
`created_at` DATETIME,
PRIMARY KEY (`id`),
INDEX `comment_FI_1` (`post_id`),
CONSTRAINT `comment_FK_1`
FOREIGN KEY (`post_id`)
REFERENCES `post` (`id`)
)Type=MyISAM;

# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;

Создаем базу данных prod

  • http://localhost/phpmyadmin/

Редактируем права доступа к базе
  • c:\xampp\htdocs\prod\config\databases.yml


all:
propel:
class: sfPropelDatabase
param:
dsn: mysql://root:123@localhost/prod



  • c:\xampp\htdocs\prod\config\propel.ini


propel.targetPackage = lib.model
propel.packageObjectModel = true
propel.project = prod
propel.database = mysql
propel.database.createUrl = mysql://root:123@localhost/
propel.database.url = mysql://root:123@localhost/prod



  • Наполняем базу данных

С:\xampp\htdocs\prod> symfony propel-insert-sql

Создаем виртуальный хост для проекта

  • С:\xampp\apache\conf\extra\httpd-vhosts.conf

<Directory "c:/xampp/php/pear/data/symfony/web/sf">
Allow from All
</directory>

<virtualhost>
DocumentRoot "c:/xampp/htdocs/prod/web"
DirectoryIndex index.php
Alias /sf "c:/xampp/php/pear/data/symfony/web/sf"

<directory>
AllowOverride All
Order deny,allow
Allow from all
</directory>
</virtualhost>

  • С:\xampp\apache\conf\httpd.conf
Listen 89

  • Прегружаем httpd

  • Создаем приложения
  1. c:\xampp\htdocs\prod> symfony propel-generate-crud blog post Post
  2. c:\xampp\htdocs\prod> symfony propel-generate-crud blog comment Comment
  3. c:\xampp\htdocs\prod> symfony clear-cache

  • Проверяем работу

  1. http://localhost:89/blog_dev.php/post

  2. http://localhost:89/blog_dev.php/comment