知识大全 高性能PHP框架Symfony2中文入门教程
Posted 文件
篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 高性能PHP框架Symfony2中文入门教程相关的知识,希望对你有一定的参考价值。
高性能PHP框架Symfony2中文入门教程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
最近 出于对Symfony 的关注 在网上闲逛时不时会留意Symfony 的文章 尤其是中文方面的 前段时间拜读了一饼兄的《Symfony 入门》一文 觉得比官网上的例子涉及面更广便做了转载 今日有暇细读 却发现一饼兄只是大体对Symfony 做了介绍 如果参照该文来入门的话 却是存在很大的问题 于是便有了这一篇文章
下载
首先是下载Symfony 这个简单 到 或者本站下载 本人由于使用的是Ubuntu系统 所以下了个 tgz的 然后解压到/var/目录中
tar zxvf Symfony_Standard_Vendors_ ### tgz C /var/
上面的###是指版本号 我下的时候是BETA
当解压之后 Symfony 的目录如下
/var// < Web根目录 Symfony/ < Symfony 解压目录 app/ < 存放symfony的核心文件的目录 cache/ < 存放缓存文件的目录 config/ < 存放应用程序全局配置的目录 logs/ < 存放日志的目录 src/ < 应用程序源代码 vendor/ < 供应商或第三方的模组和插件 web/ < Web入口 app php < 生产环境下的前端控制器
如果你需要安装(如果你下载的是without vendor版本)或更新vendor(第三方)内容时 可以使用
cd /var//Symfony php bin/vendors install
配置
Symfony 的配置很简单 只需要在浏览器中输入
//localhost/Symfony/web/config php
然后按照提示来进行就可以了 其中值得注意的就是app/cache和app/logs目录的权限问题 由于我是在Ubuntu下安装的 所以可以使用(其中firehare是我的用户名 兄弟们在这里可以用你的用户名代替)
#为了保险起见 rm rf app/cache/* rm rf app/logs/* #设置ACL sudo setfacl R m u: data:rwx m u:firehare:rwx app/cache app/logs sudo setfacl dR m u: data:rwx m u:firehare:rwx app/cache app/logs
如果系统不支持setfacl命令的话 要检查 个地方
setfacl是否已经安装 如果没有的话 可以通过以下命令安装(在Ubuntu 中好象已经缺省安装了 包为叫acl)
sudo apt get install setfacl
如果setfacl已经安装 那么请查看/etc/fstab文件 看看是否添加了acl选项
# /var was on /dev/sda during installation UUID=c cc b a b a f /var ext defaults acl
然后根据页面提示填写数据库名等信息 再将这些信息拷到/var//Symfony/app/config/parameters ini文件中 如下所示
; These parameters can be imported into other config files ; by enclosing the key with % (like %database_user%) ; Comments start with ; as in php ini [parameters] database_driver="pdo_mysql" database_host="localhost" database_name="symfony" database_user="symfony" database_password="symfony" mailer_transport="smtp" mailer_host="localhost" mailer_user="" mailer_password="" locale="zh_CN" secret=" f e e c cb dd d d c d b f"
如果全部OK的话 在你浏览器中输入下列地址时 你将得到一个Demo页
//localhost/Symfony/web/app_dev php
编程
创建Bundle
首先创建一个Bundle
php app/console gen:bundle "AcmeHelloBundle" src
为了确保Acme名称空间可以被自动加载 请在你的app/autoload php文件添加下列语句
$loader >registerNamespaces(array( // //添加自定义的名称空间 Acme => __DIR__ / /src // ));
最后是将该Bundle注册到Symfony 中 请在你的app/AppKernel php文件中添加下列语句
// app/AppKernel php public function registerBundles() $bundles = array( // new AcmeHelloBundleAcmeHelloBundle() ); // return $bundles;
创建路由
路由可以创建在app/config/routing yml中 但为了有个好的编程习惯和代码组织 可以将它放在所建Bundle目录中的Resources/config/routing yml中 而在app/config/routing yml中只保留到该路由文件的引用 如下所示
# app/config/routing yml homepage: pattern: / defaults: _controller: FrameworkBundle:Default:index hello: resource: "@AcmeHelloBundle/Resources/config/routing yml"
而真正的路由则写在src/Acme/HelloBundle/Resources/config/routing yml路由文件中 如下所示
# src/Acme/HelloBundle/Resources/config/routing yml hello: pattern: /hello/name defaults: _controller: AcmeHelloBundle:Hello:index name: pu
创建控制器
控制器的名字一定得是HelloController php 原因很简单 因为你路由已经把控制器的名字给定下来了 在上面路由文件中的第 行和第 行中的控制器都是以AcmeHelloBundle:Hello开头的 其中AcmeHelloBundle表示Bundle名 而Hello则表示控制器名 所以控制器必须是HelloController php Controller名缀是命名约定 而至于后面的index和say则是控制器类中的方法 下面就定义了index方法 当然方法名为indexAction这个也是命名约定
// src/Acme/HelloBundle/Controller/HelloController php namespace AcmeHelloBundleController; use SymfonyComponentHttpFoundationResponse; class HelloController public function indexAction($name) return new Response( <><body>Hello $name !</body></> );
这样 当我们在浏览器中输入
//localhost/hello/index/World
就会显示Hello World!这样的字样
创建模板
为了能够重用布局文件中的区块 可以使用模板来代替控制器中的HTML语句 首先创建页面布局文件
# app/Resources/views/layout ig # <!DOCTYPE > <> <head> <meta equiv="Content Type" content="text/; charset=utf " /> <title>% block title %Hello Application% endblock %</title> </head> <body> % block body %% endblock % </body> </>
注意 该文件位于app/Resources/views/目录中 作用范围是整个应用程序的全局模板文件 在该文件中定义了两个区块 title和body 接下来就是创建一个专用于Hello控制器的模板 如下所示
# src/Acme/HelloBundle/Resources/views/Hello/index ig # % extends ::layout ig % % block body % Hello name ! % endblock %
在该文件中 它继承了全局模板 并且定义了区块body 这样就覆写了全局模板中的body区块 如果系统在渲染到该模板时 会将区块body覆写全局模板的区块body 再进行渲染
最后 将控制器中的HTML语句改成渲染上述模板即可
// src/Acme/HelloBundle/Controller/HelloController php namespace AcmeHelloBundleController; use SymfonyBundleFrameworkBundleControllerController; class HelloController extends Controller public function indexAction($name) return $this >render( AcmeHelloBundle:Hello:index ig array( name => $name));
打完收功!我们已经创建了一个典型的Symfony 程序 如果兄弟们有什么疑问的话可以下面的评论中直接提
cha138/Article/program/PHP/201311/21317相关参考
国外主流PHP框架对比评测 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近简单的使用了目前在
10款PHP开发框架的对比 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/A
Struts1.x系列教程(10):Validator验证框架入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
一个简单的PHP框架实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 非原创自己集合了类A
国外十大最流行PHP框架排名 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以下为十个目前最流行
国外十大最流行的PHP框架排名 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以下为十个目前最流
php代码复制代码代码如下:<?phpclassCaptcha_codevar$width=;var$num=;var$height=;var$name=randcode;publicfun
初学入门PHP和MySQL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我想要使用要使用PHP
Ajax+PHP简单入门[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!xmlHttponre
PHP面向对象编程快速入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 面向对象编程(OOP)