【这是本人原创的文章,属于初中级别的,大神勿喷,如有过错请多多指点,看客们也请多多给赞,我会继续更新此系列文章】
想了一想还是说一下怎么快速安装吧,请记得仔细看symfony.com的手册.如果你英文不是很好,请看我是怎么安装的:
下载symfony.phar文件,浏览器就能下载:
http://symfony.com/installer
将此文件移动到你的web目录,cmd中cd到web目录,输入如下命令:
php symfony.phar
如果没有出现错误就可以创建你的第一个应用了,这样就创建了一个名字为symfony的应用。
php symfony.phar new symfony
建议同时也把symfony demo也装好
php symfony.phar demo
如果你一切都弄好了,hosts改好了,http.vhosts.conf也改好了[这个如果你不会的话建议百度关键词:windows xampp wamp apache 虚拟域名配置],那么你可以用你的域名访问默认页面,我的域名是 symfony.dev
我安装的symfony有一个bug,默认页的css没有被加载下来,这样的话你的应用如果出现错误了,提示【debug】页面将很难看,建议还是按照下面的方法处理一下:将 symfony demo项目的/web/bundles/下面的两个目录复制到你项目的同级目录,这样默认页就可以正常显示了:
symfony一切的开始应该是从appkernel【/app/AppKernel.php】这个类开始的,在app.php和app_dev.php中都有实例化这个类,而这两个文件正是项目的入口文件:
app_dev.php :
$kernel = new AppKernel('dev', true);
app.php:
$kernel = new AppKernel('prod', false);
看到参数dev【开发环境】,prod【生产环境】一切就不言而喻了吧。
appkernel干嘛用的呢?注册bundle用的,我们都知道,symfony一切皆bundle,连自己的核心代码都写在bundle里面,用户的应用也是放在bundle里面的,看AppKernel类,它继承了Kernel类,而Kernel类实现了两个接口,KernelInterface, TerminableInterface。
现在你可以开始对symfony demo熟悉了一下 【demo的安装方法在你安装symfony的CLI中都有明确的说明】,熟悉一下后可以开始尝试创建自己的bundle.
(创建bundle的命令请参见手册,或者你目前也可以跳过这一步使用默认的Appbundle)
如果你的bundle使用的是annotation格式的路由,请在控制器的开头加上
use Sensio\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;
创建赋值的方法:
public function assign($key, $value) { $this->parameters[$key] = $value; }
关键的一步:重写render方法,:
public function render($view = '', array $parameters = array(), Response $response = null) { $view = $this->getDefaultView($view); $parameters = array_merge($this->parameters, $parameters); return parent::render($view, $parameters, $response); }
我这里$views可以为空,因为有getDefaultView查找默认模板,相信你也会写一个查找默认模板的函数把。
本节到此为止,谢谢各位。