symfony中的结构应用2

时间:2012-09-13 11:47:21

标签: php symfony symfony-2.1

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

如何构建我的应用程序?

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

请为我的申请建议一些结构。

3 个答案:

答案 0 :(得分:3)

我建议您前往without bundles并使用子名称空间作为后端内容:

  • 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' %}

答案 1 :(得分:2)

由于symfony2依赖于namespaces,您可以轻松地在它们之间共享类。

假设您在FrontendBundle中定义了实体,它们就像:

namespace Acme\FrontendBundle\Entity;

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

    protected $id;

    ...

}

然后,您可以通过从头创建来引用它们:

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

或通过use导入它们:

namespace Acme\BackendBundle\Controller;

use Acme\FrontendBundle\Entity\MyEntity;

class AdminController extends Controller
{

    public someAction()
    { 

        $newEntity = new MyEntity();

    }

}

Doctrine存储库使用略有不同的表示法:

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

成为NameBundle:EntityName

请参阅symfony best practices以获得更好的线索!

答案 2 :(得分:1)

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