在symfony2 ansd中的模块(bundle)中包含管理部分,从其他模块和模板中调用它们

时间:2013-08-13 07:22:37

标签: symfony

在CodeIgniter中我使用HMVC扩展,我可以为我的模块使用这种结构:

modules/
         admin_auth
         admin_core
         admin_menu
         admin_templates
         flashnews
         flashnews_latest
         footer
         gallery
         pages/
               controllers/
                       admin.php
                       pages.php
               models/
                       mdl_pages.php
               views/
                       admin/
                              page_add.php
                              page_list.php
                       pages_front_list.php
         posts
         posts_latest
         templates
         videos

允许我将管理部分包含到我的模块中,并将其命名为admin_core和admin_menu模块。

这里有更多的deatils(最后一种方法)解释:

http://philsturgeon.co.uk/blog/2009/07/Create-an-Admin-panel-with-CodeIgniter

这样的事情可以在Symfony2中完成,如果是的话,我可以找到一些教程如何获得类似的结构,所以模块包括管理部分(控制器和视图)。我正在寻找,但我找不到那样的东西。

是否有任何书籍谈论这个问题,如何使用包含amdin部分的模块创建管理员?

1 个答案:

答案 0 :(得分:0)

我认为您误解了Symfony2为您提供的服务。我会尝试为你的用例解释一些。

我的理解

您想在自己的网站上创建管理面板。这是一个常见的案例。

怎么做

您应该为整个内容创建一个包。与AdminBundle

一样

一步一步

让我们看一下Symfony2目录结构。这是一段摘录。

project/
    app/
        config/
            config.yml
            parameters.yml
        cache/
        AppKernel.php
    src/
        Acme/
            DemoBundle/
                Controller/
                Resources/
                    config/
                    public/
                    views/
                AcmeDemoBundle.php
    vendor/
        symfony/
        autoload.php
    web/
        .htaccess
        app.php
        app_dev.php

整个project目录是应用
如果需要,它可以包含许多不同的网站,也可以只包含一个。

您的应用程序逻辑(本例中的网站)应位于src文件夹中,委派为Bundle
您可以详细了解what is a bundleshould everything be a bundle

前端逻辑

所以,在你的情况下,你可能有FrontBundle包含前端逻辑,就像这样

project/
    src/
        Acme/
            FrontBundle/
                Controller/
                    IndexController.php
                Resources/
                    views/
                        Index/
                            pages.html.twig
                        layout.html.twig

的Acme \ FrontBundle \控制器\的IndexController

<?php

namespace Acme\FrontBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class IndexController extends Controller
{
    /**
     * @Route("/pages")
     * @Template
     */
    public function pagesAction()
    {
        $em = $this->getDoctrine()->getManager();
        // Note that we fetch from AdminBundle
        $pages = $em->getRepository('AcmeAdminBundle:Page')->findAll();

        return array('pages' => $pages);
    }
}

此控制器在http://example.com/pages上匹配 这将获取AdminBundle实体的页面。

管理员面板

现在您需要一个管理面板,您可以创建另一个仅包含此逻辑的包 该捆绑包有自己的控制器和视图,可供整个应用程序使用

project/
    src/
        Acme/
            FrontBundle/
            AdminBundle/
                Controller/
                    PagesController.php
                Entity/
                    Page.php
                Resources/
                    views/
                        Pages/
                            add.html.twig
                            edit.html.twig
                        layout.html.twig
                Services/
                    AdminAuth/
                    AdminCore/

服务

这是您要添加部分组件的逻辑类 Read more about Services

实体

Read about doctrine entities

控制器

的Acme \ AdminBundle \控制器\ PagesController

<?php

namespace Acme\AdminBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

/**
 * @Route("/admin/pages")
 */
class PagesController extends Controller
{
    /**
     * @Route("/edit")
     * @Template
     */
    public function editAction()
    {
        // Edit
    }

    /**
     * @Route("/add")
     */
    public function addAction()
    {
        // Add
    }
}

编辑操作将匹配http://example.com/admin/pages/edit
添加操作将匹配http://example.com/admin/pages/add

进一步阅读

  • SonataAdminBundle - 一个随时可用的管理面板
  • Routing - 如何在symfony中使用路由
  • Security - 在symfony中验证,可以轻松保护/admin路线