Symfony2框架创建项目与模板设置实例详解

本文实例讲述了Symfony2框架创建项目与模板设置的方法分享给大家供大家参考,具体如下:

环境准备与概览

习惯于在windows使用netbean编辑器并使用virtualBox虚拟centos系统, 预将Nginx+PHP-fpm+MysqL,当然apache也是不错的选择, 使用http://symfony在windows与centos上作为开发域名。

一、下载与环境设置

1. 如何于centos上面建立开发环境不再详述, 当然也可以在windows上面建立开发环境。

2. 关于使用 symfony代替127.0.0.1 在liunx系统中修改/etc/hosts文件,win7系统中修改 C:\Windows\System32\drivers\etc\host 文件(需要用管理员权限打开)

加入类似于IP 别名1 别名2的内容即可, 如:

代码如下:

3.手动下载symfony2,也可以参照这个页面用Composer 进行安装。http://symfony.com/doc/current/book/installation.html

唯一需要注意的是: app/cache 和app/logs目录需要设置成777权限。windows的开发环境应该不存在这个问题。

4. 修改apache 或者Nginx配置文件symfony域名指向下载的symfony文件的web目录。

此时应该可以通过 http://symfony/app_dev.PHP 访问到symfony的页面, 有几个demo可以参照学习。

app_dev.PHP 认加载了一个开发工具条在下面, 显示当前页面的一些信息, 极大地方便了程序的调试, 只有当环境变量为dev时才会显示

5. 使用composer安装时, 会提示输出MysqL等相关信息, 需要修改这些信息, 或者是直接下载的文件, 可以进入页面的“Configure” 进行相关设置。

Bundles(也许可以称之为包, 束, 程序集,或者项目, 还是用英文吧)是symfony的基础小编, 一个分享出来可重复利用的代码封装, 甚至于symfony本身是作为一个bundles运行的。 包括控制器、模块、模板, 甚至于图像与js,css样式表等资源。 很杂乱的东西, 区别不同的bundles使用了PHP5.3以后的命名空间,大部分cpenal,da虚拟主机好像只有PHP5.2版本吧, 无法运行symfony2了。

二、创建一个Bundle

在下面的例子中将创建一个博客, Symfony 提供了大量工具来快速地创建项目。 比如我们可以用它来快速创建一个博客的基础bundle.

代码如下:
PHP app/console generate:bundle –namespace=Blogger/BlogBundle –format=yml

运行后直接采用所有的认设置即可。 可以方便地创建我们所需要的基本控制器,模块与模板等。 包含了下面的行为:

注册Bundles

在symfony中所有使用的bundles都要求先被注册, 有些bundles只会使用于开发测试环境(dev or test), 如前文提及的开发工具条. 下面这断代码显示了bundles创建命令如何注册BloggerBlogBundle这个bundle.

rush:PHP;"> // app/AppKernel.PHP class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // .. new Blogger\BlogBundle\BloggerBlogBundle(),); // .. return $bundles; } // .. } }

路由

作为一个框架, 路由功能被bundler创建器创建于app/config/routing.yml, symfony是用yml格式来保存配置信息。

代码如下:
fig/routing.yml BloggerBlogBundle: resource: "@BloggerBlogBundle/Resources/config/routing.yml" prefix: /

prefix前缀选项允许我们可以将其放置于如blog、news等子目录下。 文件 除了以上配置文件外, 其它大部分文件生成为src目录下, 如同大部分mvc框架。 在src下生成Blogger目录, 并有BlogBundle子目录存放着各种相关小编。不同的是类似于blogger的目录对应着PHP命名空间。

认控制器

Bundle生成器在src下面生成认了控制器。 通过访问: http://symfony/app_dev.PHP/hello/world 可以看到简单的问候。 关于这个页面是如何生成

路由

还是路由, 不同的是前面的路由是在整个程序里面注册使用, 这里的路由是控制具体页面使用, src/Blogger/BlogBundle/Resources/config/routing.yml 控制了BloggerBlogBundle, 包含以下程序片断:

代码如下:
fig/routing.yml BloggerBlogBundle_homepage: pattern: /hello/{name} defaults: { _controller: BloggerBlogBundle:Default:index }

参数: 进行url检测, 符合/hello/{name}结构的任意值将被赋予给{name}, 方式: 没有对形式进行限制, 理论可以put,get,post,delete所有的操作都可以进行。 后续: 如果符合以上两条, 那么{name}将会传导至特定文件,以上为src/Blogger/BlogBundle/Controller/DefaultController.PHP文件中的default控制器的index行为将被使用。

控制器

认生产的bundler中, 控制器行为相当简单, {name}参数被传入并被传出到模板文件

render('BloggerBlogBundle:Default:index.html.twig',array('name' => $name)); } }

BloggerBlogBundle:Default:index.html.twig 会使用 BloggerBlogBundle views文件夹中 Default文件夹下面index.html.twig模板文件.

模板文件

打开上述模板文件, 非常简单的一句代码

rush:PHP;"> {# src/Blogger/BlogBundle/Resources/views/Default/index.html.twig #} Hello {{ name }}!

以上就是symfony的整个mvc流程, 这么多文件的作用只是输出一个 “hello world”. 理论上不用bundler创建器, 只是手动创建上述文件也可以实现相同效果。花费的时间就多了去了。

回到正题, 我们是创建博客系统, 所以不需要 hello world,

1.移除控制器 src/Blogger/BlogBundle/Controller/DefaultController.PHP 2.移除模板 src/Blogger/BlogBundle/Resources/views/Default/ 3.最后移除路由 src/Blogger/BlogBundle/Resources/config/routing.yml 整个世界清静了。

三、让我们开始创建博客的主页

Twig的优点

在symfony中我们可以使用 Twig和PHP(这不是废话嘛)作为模板。使用Twig的以下优点:

1. 快: 是编绎过的PHP类, 可以占用更少的资源

2. 简洁:想想看要打, Twig输入的内容要少很多。

3. 可继承: 非常cool的一个功能

4. 安全: 转义功能认开启, 甚至还可以为重要代码提供沙盒功能

5. 可扩展: 需要额外的定制功能, 可以随时扩展

更多内容, 请移步:http://twig.sensiolabs.org/

可继承是一个非常好的优点, 我们将使用三级继承结构来定制这个模板, 这将允许我们在三个不同层级修改模板, 方便自由定制。

主模板–level 1

rush:PHP;"> {% block title %}symfony{% endblock %} – blog