415 12
发新话题
打印

运行Symfony - 在项目中使用Symfony框架

运行Symfony - 在项目中使用Symfony框架

     本贴教你如何安装和使用Symfony
     转载注明:PHP开发资源网(http://bbs.phpre.com/)
     
     如前面的贴子中所讲述到的, Symfony是由许多PHP文件组成的框架. Symfony的项目需要使用这些文件, 所以安装Symfony其实就是让项目中可以使用这些文件.

Symfony是基于PHP5的框架. 所以用一下命令确认你安装了正确的版本:

> php -v
PHP 5.2.0 (cli) (built: Nov 2 2006 11:57:36)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies

如果版本号大于5.0, 你就可以开始安装了, 安装过程将在此章节介绍。.

TOP

安装沙盒(Sandbox)
如果你只是想要快速安装,试用一下Symfony,你应该使用沙盒。
沙盒里有一个空的Symfony项目包括基本的配置, 一个默认的应用程序, 还有Symfony所需要的库(symfony, pake, lime, Creole, Propel, 还有 Phing). 它可以独立运行,不需要特别的服务器配置。
沙盒可以从http://www.symfony-project.com/get/sf_sandbox.tgz来下载。解压缩到web服务器的根目录中 (通常是 web/ 或者 www/)。 为了统一性, 本章将假设你把它解压到sf_sandbox目录下。
NOTE 把所有的文件放在web根目录下对于测试没有什么问题,不过在正式服务器上这么作是一个坏习惯。这样会把所有程序的内部文件暴露给最终用户。
执行Symfony CLI来测试安装是否成功。 在sf_sandbox/目录下,输入以下命令: Linux 系统下:
> ./symfony -V
Windows 系统下:
> symfony -V
你会看到沙盒的版本号:
symfony version 1.0.0
现在请确认你的web服务器可以从下面的地址来访问沙盒:
http://localhost/sf_sandbox/web/frontend_dev.php/
如果你看到一个类似图 3-1一样的成功页面, 这就意味着安装已经完成。 如果没看到, 将会有一个错误信息告诉你如何去修改配置文件。 你也可以参考下面的"安装问题"章节。
图 3-1 - 沙盒的祝贺页面




沙盒是用来给你在自己的电脑上面练习,并不适合开发复杂的应用程序。不过,沙盒里的symfony的功能是完整的,与通过PEAR安装的没有差别。
要卸载沙盒,只要把web/目录下的sf_sandbox/删除即可

TOP

安装Symfony库 Installing the Symfony Libraries

开发程序的时候, 你也许会安装Symfony2次: 一次是你的开发环境,另外一次是在服务器上(除非服务器上已经安装过Symfony)。对于每台服务器而言,为了避免重复你也许会吧所有的symfony文件放在一个地方,不管你开发几个程序。

因为Symfony框架更新的很快, 一个新的稳定版本可能在你安装后的数天内就有了. 所以需要仔细考虑关于框架如何更新的问题, 那也就是另外一个理由为什么需要在所有Symfony项目中共向一个Symfony库的实例.

当要在真正程序开发中安装库的时候,你有2个选择:
对大多数人而言推荐用PEAR安装方式. 他很容易共享和升级, 安装过程直接了当.
Subversion (SVN) 安装模式通常是高级PHP程序开发者使用的, 可以获得最新的补丁, 增加自己开发的功能,发布Symfony的项目。

Symfony集成了一些其他的包:
pake一个命令行工具
lime是单元测试工具
Creole是数据库抽象引擎. 类似于PHP数据对象 (PDO), 他提供了程序代码与SQL数据库代码之间的一个接口, 以便切换到其他数据库.
Propel是ORM工具.它提供持续对象与查询服务。
Phing是Propel的命令行。

Pake 和 lime 是symfony小组开发的. Creole, Propel, and Phing 是由其他小组开发并置于GNU Lesser Public General License (LGPL)协议下. 所有这些包都绑定在Symfony中.

TOP

Pear方式安装Symfony Installing the Symfony PEAR Package

Symfony的PEAR包包含了Symfony库。 它也包含一个将symfony加入你的命令行的脚本。

安装第一步 是把Symfony频道加入PEAR, 执行以下命令:
> pear channel-discover pear.symfony-project.com

用以下命令查看这个频道中的可用库列表
> pear remote-list -c symfony

现在可以安装稳定版本的Symfony了。 执行以下命令:
> pear install symfony/symfony

downloading symfony-1.0.0.tgz ...
Starting to download symfony-1.0.0.tgz (1,283,270 bytes)
.................................................................
.................................................................
.............done: 1,283,270 bytes
install ok: channel://pear.symfony-project.com/symfony-1.0.0

Symfony文件和命令行工具已经安装好了。在命令行执行symfony来确认安装是否成功, 查看版本号:

symfony -V
symfony version 1.0.0

TIP 如果要安装最新的beta版本, 用命令 pear install symfony/symfony-beta 来安装。 Beta版本通常是不稳定的,不推荐在生产环境中用。

Symfony库安装在以下的目录中:
$php_dir/symfony/ 存放主要库文件。
$data_dir/symfony/ 存放Symfony程序的结构; 默认的模块; 配置文件, i18n数据, 和其他.
$doc_dir/symfony/ 存放文档.
$test_dir/symfony/ 存放单元测试.

变量_dir是PEAR配置的一部分,用以下命令查看它的值:
> pear config-show

TOP

从SVN库中获得Symfony Checking Out Symfony from the SVN Repository

For production servers, or when PEAR is not an option, you can download the latest version of the symfony libraries directly from the symfony Subversion repository by requesting a checkout: 对于生产服务器, 或者不能从PEAR安装的时候, 你可以直接从symfony subversion库里通过签出下载最新的版的symfony。
> mkdir /path/to/symfony
> cd /path/to/symfony
> svn checkout http://svn.symfony-project.com/tags/RELEASE_1_0_0/ .

命令symfony,只有在用PEAR安装时候才有效, 实际上是调用了/path/to/symfony/data/bin/symfony脚本。 所以SVN安装模式的话就用下面的命令查看版本:
> php /path/to/symfony/data/bin/symfony -V

symfony version 1.0.0

如果选择用SVN安装方式, 你也许已经有了一个Symfony项目。 你需要在你的项目中更改两个变量来让他可以找到symfony文件:
[php]
<?php

$sf_symfony_lib_dir  = '/path/to/symfony/lib/';
$sf_symfony_data_dir = '/path/to/symfony/data/';

第十九章提供了用另外一种把项目和symfony安装关联起来(包括了符号连接和相对路径)的另一种方法。

TIP 或者,你也可以下载PEAR包 (http://pear.symfony-project.com/get/symfony-1.0.0.tgz) 然后把它解压. 这就和从版本库中取得是一样的。

TOP

配置一个程序 Setting Up an Application

就如在第二章所学, symfony把相关的程序放在项目中。 项目中所有的程序都共享同一个数据库。 为了设置一个程序,你必须先建立一个项目。
建立一个项目 Creating the Project

每个Symfony项目都有一个预定义的目录结构。 Symfony命令行会自动建立一个新的项目的框架, 合适的树状结构和访问权限。 所以要建立一个新项目, 只需简单的建立一个目录,然后告诉Symfony在此建立一个项目即可。

PEAR安装方式用以下命令:
> mkdir ~/myproject
> cd ~/myproject
> symfony init-project myproject

SVN安装方式,用以下命令建立项目:
> mkdir ~/myproject
> cd ~/myproject
> php /path/to/symfony/data/bin/symfony init-project myproject

symfony命令只能在项目的根目录下使用(myproject/ in the preceding examples), 因为用这个命令所作的事情都是基于项目的.

Symfony会建立一个目录结构
apps/
batch/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/

TIP init-project在项目根目录中增加一个symfony脚本。这个PHP脚本和用PEAR安装的symfony命令做的一样,所以没有原生命令行(SVN安装方式)支持的话你可以用php symfony来替代symfony。

TOP

建立一个程序 Creating the Application

项目现在还没法用,因为他还至少需要一个应用程序。用symfony init-app命令传送一个应用程序的名字作为一个参数去初始化它:
> symfony init-app myapp

This will create a myapp/ directory in the apps/ folder of the project root, with a default application configuration and a set of directories ready to host the file of your website: 这将在项目根的apps/目录下建立一个叫myapp/的目录,这包含了一个默认的应用程序配置和一系列的目录
apps/
  myapp/
    config/
    i18n/
    lib/
    modules/
    templates/

在项目web目录里还会建立这个应用程序的两个默认环境对应的前端控制器的PHP文件:
web/
  index.php
  myapp_dev.php

index.php是新应用程序的生产环境前端控制器。 因为当你在项目中创建了第一个应用程序的时候, symfony建立一个叫index.php的文件来代替myapp.php (如果你现在增加一个新的应用程序mynewapp, 新的生产环境前台会是mynewapp.php)。 要在开发环境中呼叫前台控制器myapp_dev.php来运行你的应用程序,你会在第5章了解更多此环境。

TOP

设置虚拟主机 Setting Up a Virtual Host

例 3-1 是一个Apache配置的示例,可以了解如何在httpd.conf中添加新的虚拟主机。

例 3-1 - Apache配置示例,apache/conf/httpd.conf
<VirtualHost *:80>
  ServerName myapp.example.com
  DocumentRoot "/home/steve/myproject/web"
  DirectoryIndex index.php
  Alias /sf /$sf_symfony_data_dir/web/sf
  <Directory "/$sf_symfony_data_dir/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
  <Directory "/home/steve/myproject/web">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>
配置Web服务器 Configuring the Web Server

web/目录下的这些脚本是应用程序的入口点。 Web服务器要先配置才能在Internet中被访问。在开发服务器中, 和在专业服务解决方案一样, 也需要访问Apache配置文件去设置一个虚拟主机。 在一个共享的服务器中, 你也许只能访问一个.htaccess文件。


在 例 3-1 配置中, 需要用真实的路径替换掉/path/to/symfony/data。 例如,在*nix中用PEAR安装的话,你要输入类似这样:
    Alias /sf /usr/local/lib/php/data/symfony/web/sf

NOTE 给web/sf/设置别名并非是强制的。 这可以让Apache去找到网页debug工具条所用的图片,style sheets和JavaScript文件, 管理界面生成器, symfony的默认页面还有Ajax支持。另外一个设置别名的方法是建立一个符号连接(symlink)或者把/path/to/symfony/data/web/sf/复制到myproject/web/sf/中。

重起Apache。 你新建立的应用程序现在能用以下的连接来访问:
http://localhost/myapp_dev.php/

你可以看到一个类似先前 图 3-1 的成功页面。

SIDEBAR URL重写 URL Rewriting

Symfony用URL重写来显示"漂亮的URL"--有意义的地址对搜索引擎更友好并且对使用者隐藏了所有的数据。 你会在第九章学习更多这方面的知识--路由(routing)。

如果你的Apache编译的时候没有选择mod_rewrite模块, 检查httpd.conf中是否包含了mod_rewriteDynamic Shared Object (DSO)。

AddModule mod_rewrite.c LoadModule rewrite_module modules/mod_rewrite.so

对于Internet Information Services (IIS),你需要安装和运行isapi/rewrite。 Symfony在线手册有关于IIS安装的详细指导。

TOP

配置一个共享服务器 Configuring a Shared-Host Servertrickier

在共享服务器上配置一个应用程序有一些麻烦,因为服务器通常有你无法改变的特殊目录结构。

CAUTION 直接在共享服务器上测试和开发并不是一个好的做法。 一个原因是因为这会让应用程序在未完成的时候可以被访问到, 被揭示其内部将会带来很大的安全隐患。另一个原因是,共享主机的性能往往不够你浏览应用与有效的使用调试工具. 因此你不应在共享服务器上开始你的开发, 而应该在本地建立你的应用程序,完成后再移植到共享服务其上。 第16章将告诉你移植技术和工具。

让我们想象一下你的共享服务其需要把网页目录命名为www/来取代web/, 并且不允许你修改httpd.conf而只允许你修改在网页目录中的.htaccess文件。

在一个Symfony项目中,每一个目录路径都是可配置的。 第19章将带给你更多的信息,但是与此同时,你可以把web目录改为www目录,并且修改应用程序的配置, 就如 例 3-2所示。 这些将在应用程序的config.php文件底部加上。

例 3-2 - 在 apps/myapp/config/config.php 修改默认目录结构设定


$sf_root_dir = sfConfig::get('sf_root_dir');
sfConfig::add(array(
  'sf_web_dir_name' => $sf_web_dir_name = 'www',
  'sf_web_dir'      => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name,
  'sf_upload_dir'   => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name.DIRECTORY_SEPARATOR.sfConfig::get('sf_upload_dir_name'),
));

TOP

项目的网页根目录默认包含了一个 .htaccess 文件。 就如 例 3-3 所示。 适当的修改它以配合你的共享服务器的需求。

例 3-3 - 默认的 .htaccess 配置, 现在在 myproject/www/.htaccess

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On

  # we skip all files with .something
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule .* - [L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

# big crash from our front web controller
ErrorDocument 500 "<h2>Application error</h2>symfony applicationfailed to start properly"


现在可以访问你的应用程序了。 你可以通过这个URL访问symfony成功页面:
http://www.example.com/myapp_dev.php/

SIDEBAR 其他服务器配置 Other Server Configurations

Symfony和其他服务器配置兼容。 例如,你可以用alias代替虚拟服务起来访问symfony程序。 你也能在IIS Server上运行symfony程序。关于配置有很多技巧, 本书并不准备解释所有的技巧。

想要找到具体的服务器配置指引,可以参考symfony的wiki (http://www.symfony-project.com/trac/wiki), 这里有详尽的指导.

TOP

 415 12
发新话题