symony入门教程【一】

摘要:摘要: 因为要开始正式接手公司的项目了。不过还是做一个简单的cms开始,对数据层这一块不是很熟练,边学边记(记性差,过目就忘的那种...)

【这是本人原创的文章,属于初中级别的,大神勿喷,如有过错请多多指点,看客们也请多多给赞,我会继续更新此系列文章】

‍‍安装‍‍

想了一想还是说一下怎么快速安装吧,请记得仔细看symfony.com的手册.如果你英文不是很好,请看我是怎么安装的:

下载symfony.phar文件,浏览器就能下载:

http://symfony.com/installer

将此文件移动到你的web目录,cmd中cd到web目录,输入如下命令:

phpsymfony.phar

如果没有出现错误就可以创建你的第一个应用了,这样就创建了一个名字为symfony的应用。

phpsymfony.pharnewsymfony

建议同时也把symfony demo也装好

phpsymfony.phardemo

如果你一切都弄好了,hosts改好了,http.vhosts.conf也改好了[这个如果你不会的话建议百度关键词:windows xampp wamp apache 虚拟域名配置],那么你可以用你的域名访问默认页面,我的域名是 symfony.dev

我安装的symfony有一个bug,默认页的css没有被加载下来,这样的话你的应用如果出现错误了,提示【debug】页面将很难看,建议还是按照下面的方法处理一下:将 symfony demo项目的/web/bundles/下面的两个目录复制到你项目的同级目录,这样默认页就可以正常显示了:

symfony入口

symfony一切的开始应该是从appkernel【/app/AppKernel.php】这个类开始的,在app.php和app_dev.php中都有实例化这个类,而这两个文件正是项目的入口文件:

app_dev.php :

$kernel=newAppKernel('dev',true);

app.php:

$kernel=newAppKernel('prod',false);

看到参数dev【开发环境】,prod【生产环境】一切就不言而喻了吧。

appkernel干嘛用的呢?注册bundle用的,我们都知道,symfony一切皆bundle,连自己的核心代码都写在bundle里面,用户的应用也是放在bundle里面的,看AppKernel类,它继承了Kernel类,而Kernel类实现了两个接口,KernelInterface, TerminableInterface。

现在你可以开始对symfony demo熟悉了一下 【demo的安装方法在你安装symfony的CLI中都有明确的说明】,熟悉一下后可以开始尝试创建自己的bundle.


创建bundel

(创建bundle的命令请参见手册,或者你目前也可以跳过这一步使用默认的Appbundle)

如果你的bundle使用的是annotation格式的路由,请在控制器的开头加上

useSensio\Bundle\FrameworkExtraBundle\Configuration\Route;

如果你使用的是phpstrom,它会提示里这个命名空间没有被使用,这是正常的,因为你的路由写在注释里面

进阶教程
更好的模板赋值方法

现在要说说twig和smarty这两个模板引擎,symfony自带的是自己研发的twig,如果熟悉了smarty的小伙伴可能不习惯用symfony的$this->render(‘模板名’,array('变量名' => '变量值'))这样的模板赋值的方法,或者我们在渲染模板的时候需要对变量做判断,进行其他处理,现在使用如下方法可以$this->assgin('变量名',‘变量值’)然后再$this->render()渲染模板:

定义一个CommonController.php放在DefaultController.php同级目录,让他继承Controller.php[注意命名空间的引用,不然会报找不到类Controller之类的错误],然后DefaultController.php继承CommonController.php

在CommonController 添加属性

protected$parameters;

创建赋值的方法:

publicfunctionassign($key,$value){ $this->parameters[$key]=$value; }

关键的一步:重写render方法,:

publicfunctionrender($view='',array$parameters=array(),Response$response=null){ $view=$this->getDefaultView($view); $parameters=array_merge($this->parameters,$parameters); returnparent::render($view,$parameters,$response); }

我这里$views可以为空,因为有getDefaultView查找默认模板,相信你也会写一个查找默认模板的函数把。

本节到此为止,谢谢各位。