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

symfony2 は名前空間に依存しているため、それらの間でクラスを簡単に共有できます。

でエンティティを定義したとします。エンティティは次の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 のベストプラクティスを参照してください!

于 2012-09-13T11:57:01.690 に答える
1

前の回答が示すように、最善のアプローチは 1 つではありません。3つ持っておくと便利だと思います。他の共有機能と一緒にエンティティを含む CoreBundle と、コア バンドルの上にあるフロントエンド/バックエンド バンドル。しかし、繰り返しになりますが、最善のアプローチは 1 つではありません。

于 2012-09-13T14:03:04.430 に答える