Symfony2是一个非常优秀的框架,但它也仅仅只是框架。框架的作用众所周知是为了能够快速开发出代码组织良好的应用程序,而且基于框架开发者 可以集中精力进行业务逻辑的开发,而不会将精力浪费在其它细节上面。虽然框架有着很多的好处,但它并不象CMS、Wordpress之类的PHP程序那样 是拿来就可以用的,它要实现某种功能是需要开发的。
第三方的Bundle其实部分解决了这个问题,当你需要基于Doctrine的用户和角色时,你无须开发一个用户和角色的Bundle,而只需要安 装Symfony2Bundle网站中的UserBundle即可。同样,你需要管理功能,只需安装AdminBundle。同样还有 MenuBundle、RestBundle等第三方的Bundle供你使用。那么为什么要使用第三方Bundle而不自行开发呢?原因一来是那句老话不 要重复去发明轮子,二来则是与框架一样的,将精力集中在业务逻辑上(这通常是独一无二或无法重用的)。
那么如何将第三方的Bundle安装到Symfony2系统中呢?
安装第三方Bundle
首先,找到第三方Bundle,查看它Resources/doc/目录中的index.rst,看看它的Bundle名、下载目录和安装目录。以UserBundle为例,查看其Resources/doc/index.rst文件中的安装语句;
然后,打开Symfony2目录中的deps文件(该文件位于Symfony/根目录下),将安装语句添加在该文件的末尾,如下所示:
- [FOSUserBundle]
- git=git://github.com/FriendsOfSymfony/UserBundle.git
- target=/bundles/FOS/UserBundle
最后运行命令行命令(在Symfony2根目录下):
- $ php bin/vendors install
- > Installing/Updating symfony
- ...
- > Installing/Updating FOSUserBundle
- Cloning into /var/www/Symfony/vendor//bundles/FOS/UserBundle...
- remote: Counting objects: 7715, done.
- remote: Compressing objects: 100% (2730/2730), done.
- remote: Total 7715 (delta 4942), reused 7285 (delta 4570)
- Receiving objects: 100% (7715/7715), 916.65 KiB | 105 KiB/s, done.
- Resolving deltas: 100% (4942/4942), done.
- HEAD is now at 86bf6fa Updated commands for Symfony changes. Breaks compatibility with beta5
- ...
这样就已经下载并安装了UserBundle了。
如果你更新第三方的Bundle,你只需要在命令行中输入:
- $ php bin/vendors update
- ...
- > Installing/Updating FOSUserBundle
- Cloning into /var/www/Symfony/vendor//bundles/FOS/UserBundle...
- remote: Counting objects: 7720, done.
- remote: Compressing objects: 100% (2733/2733), done.
- remote: Total 7720 (delta 4945), reused 7288 (delta 4571)
- Receiving objects: 100% (7720/7720), 917.08 KiB | 171 KiB/s, done.
- Resolving deltas: 100% (4945/4945), done.
- HEAD is now at affe193 Updated the doc to use the ini syntax for the deps file
- ...
从上例不难看出UserBundle进行了更新,对文档中的deps文件部分使用了ini语法。
激活第三方Bundle
安装好了就要进行使用,在Symfony2中安装Bundle和激活Bundle是两个概念,要使用就必须得激活,激活其实已经在上一篇博文《Symfony2入门》中已经说得很清楚了,这里权当复习一遍:
首先,确保FOS名称空间可以被自动加载,在app/autoload.php文件中添加以下语句:
- $loader->registerNamespaces(array(
- // ...
- //添加自定义的名称空间
- 'FOS' => __DIR__.'/../vendor/bundles',
- // ...
- ));
其次,将该Bundle注册到Symfony2中,请在你的app/AppKernel.php文件中添加下列语句:
- // app/AppKernel.php
- public function registerBundles()
- {
- $bundles = array(
- // ...
- new FOSUserBundleFOSUserBundle(),
- );
- // ...
- return $bundles;
- }
注意,由于该Bundle需要SecurityBundle,所以要确保SecurityBundle已经被注册。
打完收功!!我们已经安装并激活了一个第三方的Bundle。如果兄弟们有什么疑问的话可以下面的评论中直接提