我正在使用symfony 2.1建立一个在线商店。基本上我有我的网站用户可以查看的前端部分,为管理员用户添加项目和后端部分来管理整个站点。前端和后端部分将有不同的模板,但数据库模型(Doctrine)对于两者都是相同的。
如何构建我的应用程序?
以前我使用的是symfony 1.4,我可以创建前端应用程序和后端应用程序。 Symfony 2处理捆绑包。我应该为前端创建2个捆绑,为后端创建一个捆绑吗? 创建这样的结构,如何能够在它们之间共享模型。
请为我的申请建议一些结构。
答案 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包含实体以及其他共享功能,然后包含位于核心包之上的前端/后端捆绑包。但同样,没有一种最好的方法。