2

我正在使用 symfony 2.1 建立一个在线商店。基本上我有前端部分,我的网站的用户可以从中查看、添加项目和后端部分,供管理员用户管理整个网站。前端和后端部分将具有不同的模板,但两者的数据库模型(Doctrine)相同。

我如何构建我的应用程序?

以前我使用的是 symfony 1.4,我可以在其中创建前端应用程序和后端应用程序。Symfony 2 处理捆绑包。我应该创建 2 个捆绑包,一个用于前端,一个用于后端吗?创建这样的结构,如何才能在它们之间共享模型。

请为我的应用程序建议一些结构。

4

3 回答 3

3

我建议你使用捆绑包,并为后端的东西使用子命名空间:

  • Vendor\Controller\UserController— 前端用户控制器,
  • Vendor\Controller\Backend\UserController— 后端用户控制器。

模板也将被子命名空间:

  • app/Resources/views/User/view.html.twig,
  • app/Resources/views/Backend/User/view.html.twig.

您可以将其他模板中的子命名空间模板引用为:

{% include ':Backend\User:someTemplate.html.twig' %}
于 2012-09-13T12:08:23.177 回答
2

As symfony2 relies on namespaces, you can share classes between them easily.

Let's say you defined your entities in FrontendBundle, they will be like:

namespace Acme\FrontendBundle\Entity;

/** @ORM annotations stuff */
class MyEntity
{

    protected $id;

    ...

}

You can then refer to them either by creating from scratch:

$newEntity = new \Acme\FrontendBundle\Entity\MyEntity();

or by importing them via use:

namespace Acme\BackendBundle\Controller;

use Acme\FrontendBundle\Entity\MyEntity;

class AdminController extends Controller
{

    public someAction()
    { 

        $newEntity = new MyEntity();

    }

}

Doctrine repositories use a slightly different notation:

$this-> getDoctrine()
    -> getEntityManager()
    -> getRepository('FrontendBundle:MyEntity')
    -> findAll();

being it NameBundle:EntityName.

Refer to symfony best practices to get a better clue!

于 2012-09-13T11:57:01.690 回答
1

正如之前的答案所示,没有单一的最佳方法。我发现拥有三个捆绑包很有用。一个包含实体以及其他共享功能的 CoreBundle,然后是位于核心包之上的前端/后端包。但同样,没有单一的最佳方法。

于 2012-09-13T14:03:04.430 回答