最新消息:文章中包含代码时,请遵守代码高亮规范!

FosUserBundle-安装篇【原创】

PHP 祝, 毕亮 1139浏览 0评论

安装FosUserBundle的详细地址为http://symfony.com/doc/master/bundles/FOSUserBundle/index.html,这里就不再做过多的重复了.

直接进入正题:

安装好FosuserBundle后我们继续进行下一步:

1.重写FosUserBundle的默认模板

当你开始在你应用程序中导入FosUserBundle的时候,你会发现他提供的bundle中,你需要重写他的默认模板,尽管模板的名字是不能配置的,

symfony提供了一种很好地解决方法(override the templates themselves.)

补充:怎么复写第三方bundle的模板

symfony社区引以为傲的是他们创造并维护了许多不同特点的bundle。你可能需要重写或者定制一个或者多个模板。假设你在你的项目中导入了一个开源的AcmeBlogBundle。并且当你对这一切很满意的时候,你想在你的应用程序中定制一些特殊的blog的’list’。查看AcmeBlogBundle的blogController,你会发现如下代码:

public function indexAction(){
    // some logic to retrieve the blogs
    $blogs = ...;

    $this->render(
        'AcmeBlogBundle:Blog:index.html.twig',
        array('blogs' => $blogs)
   );}

当AcmeBlogBundle:Blog:index.html.twig这个模板被渲染的时候(也就是模板被加载出来的时候),symfony实际上是在两个地方来寻找这些模板的:

1.app/Resources/AcmeBlogBundle/views/Blog/index.html.twig

2.src/Acme/BlogBundle/Resources/views/Blog/index.html.twig

为了复写bundle的模板,只需要在bundle下复制index.html.twig到app/Resources/AcmeBlogBundle/views/Blog/index.html.twig目录下(app/Resourse/AcmeBlogBUndle的目录本来是不存在的,你需要重新创建他们),现在你可以随意的定制模板了。注意:如果你新添加了模板,你可能需要清理一下缓存(php bin/console cache:clear),即使你再调试模式下面.

这个逻辑也可以应用于基础的bundle的模板上,还假设在AcmeBlogBundle 中的每个模板都继承与一个AcmeBlogBundle::layout.html.twig的主要模板,正如前面所说的,symfony会在下面的两个地方查找模板:

1.app/Resources/AcmeBlogBundle/views/layout.html.twig

2.src/Acme/BlogBundle/Resources/views/layout.html.twig

和上面一样,为了复写模板,只需要复制对应bundle下的模板到app/Resources/AcmeBlogBundle/views/layout.html.twig下,你现在可以随意定制你的模板了。回想一下,你会发现symfony总是现在app/Resources/{BUNDLE_NAME}/views/目录下寻找模板。如果这个目录下的模板不存在。他就会继续在对应的bundle的Resources/views下寻找,这就意味着所有的模板都可以在app/Resources下的目录被复写.

注意:你也可以在bundle内部使用继承来重写模板.

拓展:怎样使用bundle的继承来复写部分bundle

在处理第三方包时, 你可能会遇到一种情况,你可能想用自己的bundle文件来复写那个第三方bundle的那个文件.像在bundle的Resources/复写控制器,模板和一些其他的文件,symfony提供了一种非常方便的方法去重写他们。

比如:假设你已经配置好了FosUserBundle,但是你想复写他的基础模板layout.html.twig以及其中的一个控制器。

首先, 在你的项目中创建一个bundle命名为UserBundle并且使他有效,然后,让你的bundle继承第三方的FodUserBundle。(让你的bundle知道自己的父亲是FosUserBundle)

    // src/UserBundle/UserBundle.php    
    namespace UserBundle;
    use Symfony\Component\HttpKernel\Bundle\Bundle;
    class UserBundle extends Bundle{
    public function getParent()
    {
        return 'FOSUserBundle';
    }}

通过这个简单的改变,通过创建一些相同的名字你可以很简单的复写FosUserBundle。

注:不管方法的名称,他们之间是否有父/子关系,这就是一种扩张和重写存在bundle的一张方法.

2.重写控制器

假设你想在FOSUserBundle的RegistrationController控制器的registerAction()action内添加一些功能,这样做,只需要创建你自己的RegistrationController.php文件,重写bumdle的原始方法和改变他的功能.

    // src/UserBundle/Controller/RegistrationController.php
    namespace UserBundle\Controller;
    use FOS\UserBundle\Controller\RegistrationController as BaseController;
    class RegistrationController extends BaseController{
    public function registerAction()
    {
        $response = parent::registerAction();

        // ... do custom stuff
        return $response;
    }}

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/19920.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Galen的打赏,我们会更加努力!    如果您想成为作者,请点我

发表我的评论
取消评论

表情