Symfony 1.4 簡易 Hello, World

建立 project

首先,將以下 copy 成 symfony_init.sh:

#!/bin/sh
if ! test $# -eq 1
then
    echo 'Usage: ./symfony_init.sh <project_name>'
    exit
fi

PROJECT_NAME=$1
SYMFONY_VER=1.4.13

mkdir $PROJECT_NAME
cd $PROJECT_NAME
mkdir -p lib/vendor
cd lib/vendor
wget http://www.symfony-project.org/get/symfony-$SYMFONY_VER.tgz
tar xvf symfony-$SYMFONY_VER.tgz
mv symfony-$SYMFONY_VER symfony; rm symfony-$SYMFONY_VER.tgz
cd ../../; git init; git add .; git commit -m "$PROJECT_NAME init"

# create project
php lib/vendor/symfony/data/bin/symfony generate:project $PROJECT_NAME
git add .;git commit -m "$PROJECT_NAME project generated"

執行:

$ chmod +x ./symfony_init
$ ./symfony_init.sh mysite

這樣就建立了 mysite 這個目錄,裡面就是整個 symfony project 架構

設定 mysite 資料庫帳號密碼

$ cd mysite
$ ./symfony configure:database "mysql:host=localhost;dbname=dbname" username password

建立 app

(目錄 mysite):

$ ./symfony generate:app frontend

設定 apache

範例如下,記得改掉 /home/OOO/mysite:

# Be sure to only have this line once in your configuration
NameVirtualHost 127.0.0.1:8080

# This is the configuration for your project
Listen 127.0.0.1:8080

<VirtualHost 127.0.0.1:8080>
  DocumentRoot "/home/OOO/mysite/web"
  DirectoryIndex index.php
  <Directory "/home/OOO/mysite/web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf /home/OOO/mysite/lib/vendor/symfony/data/web/sf
  <Directory "/home/OOO/mysite/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

主機商不給設定 apache

把 mysite/* 所有資料放到主機商的網頁目錄下,然後增加這個 .htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} ^/images/  [OR]
    RewriteCond %{REQUEST_URI} ^/js/      [OR]
    RewriteCond %{REQUEST_URI} ^/css/
    RewriteRule ^(.*)$ /web/$1 [L]

    RewriteCond %{REQUEST_URI} !^/web/
    RewriteRule ^(.*)$ /web/index.php [QSA,L]
</IfModule>

然後:

$ cd web
$ ln -s ../lib/vendor/symfony/data/web/sf

Hello, world

建 hello module:

$ ./symfony generate:module frontend hello

將剛剛建好的 hello module 變成首頁:

$ cd apps/frontend/config

修改 routing.yml 的 homepage 的 param 改成:

param: { module: hello, action: index }

此時看網頁還是舊畫面,因為 symfony 有 cache, 所以必須清 cache(先回到目錄 mysite):

$ ./symfony cc

接著再重連就可以看到首頁已經切換成 hello module

但是這依舊是 symfony 預設頁面,所以修改 mysite/apps/frontend/modules/hello/actions/actions.class.php:

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

這樣就會導到 hello 的 templates/indexSuccess.php

所以在 indexSuccess.php 寫上 hello world 再重整頁面就完成了。

其他重點

請好好學 generate, 我如此告訴自己,尤其是 admin generator

還有這邊的資料 http://www.symfony-project.org/doc/1_4/

http://ricky.ez2.us/2011/07/15/symfony-admin-generator-%E5%BE%8C%E5%8F%B0%E7%94%A2%E7%94%9F%E5%99%A8/