CRUDベースのWebプロジェクトを作成していて、サーバー側のMVCフレームワーク(CodeIgniterやLaravelなど)とクライアント側のMVCフレームワーク(AngularJSなど)を併用することを考えています。これはかなり一般的なアプローチですか?結局のところ、サーバー上で何かが必要であり、クライアント上でもMVCを実行することでアプリケーションを強化できることは明らかです。しかし、同じプロジェクトの2つのMVCフレームワークは、互いに邪魔になり、過度の複雑さと繰り返しにつながると思います。
1つをクライアントで使用し、もう1つをサーバーで使用するときに、両方のMVCフレームワークを最大限に活用するにはどのようなアプローチまたはアーキテクチャが役立ちますか?
LaravelとAngularJSは実際には非常にうまく連携しています。それに関するLaracastsの良いビデオといくつかの良い記事がオンラインにあります。
一般に、肥大化と多くの冗長性を増加させるため、1つのプロジェクトで複数のMVCフレームワークを使用することは望ましくありません。平均的なPHP MVCフレームワークには、ORM、テンプレートエンジン、ルーターなど、必要なコンポーネントは1つだけです。実際、2つを使用すると、おそらく複雑さが増し、競合が発生します。
ここでの例外は、サーバー側フレームワークとクライアント側フレームワークの場合のように、フレームワークが明確に分離されている場合です。どちらのフレームワークも実際にはまったく異なることをしています。
ただし、LaravelとAngularJSの使用を組み合わせる場合は、Laravelの機能のすべてを使用しているとは限りません。推奨される戦略は、Laravelのリソースルートを使用してREST APIに似たものを実装し、すべての対話をAJAX API呼び出しとして扱うことです。
つまり、V of Laravelを実際に使用することはありません。つまり、ブレードでのビュー。 (おそらくアプリを最初にロードするためのレイアウトは別として)
「Laravel and AngularJS」の簡単なグーグルは、大量の記事を返しますが、おそらく最良のリソースはこのサンプルプロジェクトです。
Githubの例: https://github.com/bktz/Laravel-4-AngularJS-Starter-Site
注目すべき記事はこれですが:
http://scotch.io/tutorials/php/create-a-laravel-and-angular-single-page-comment-application
そのようなアプリの提案された構造と、前述のリソースルートについて説明します。
クライアント側でAngularJSを使用し、バックエンドでLaravelを使用する場合は、最初にアプリケーションがロードされて稼働する開始ページを作成します。そして、その周りでJSONサービスを構築します(laravelまたはその他のいくつかのコントローラメソッドで、応答と要求を処理するCRUD)。
さまざまなオブジェクト(テーブル?)がたくさんある場合は、それぞれに開始ビューを作成します。
それはすべて異なるレイヤーです。クライアント側のMVC js-frameworkはオプションです。アプリケーションの構造化に大きく役立ちますが、フレームワークなしでアプリケーション構造を構築することもできます。しかし、それはあなた次第です。これらのテクノロジーを使いたくなった場合は、先に進んでコーディングを開始してください。
ベストプラクティスでは、MVCとangularJSの両方を使用しているときに、サーバーからデータを取得するためにサーバー側でMVC Web APIを使用する必要があり、クライアント側では、JSONデータをHTMLコントロールにバインドするためにAngularjsフレームワークを使用する必要があります。
クライアント上:クライアント上で、AngularJSを使用して、Web APIの呼び出しからローカル検証まですべてを処理しました。 Web上の最新のプッシュによってプッシュされている「即時」応答をユーザーに提供します。ページを動的または比較的静的にすることができます。関心の分離を使用しているアーキテクチャを使用することで、RESTful APIをサポートするものでバックエンドを置き換えることができます。
サーバー上:クライアントにデータサービスを提供するために、一連のRESTful Web APIを構築するのが最も簡単であることがわかりました。また、サーバーで検証を実行して、だまされないようにします(Webページ以外のクライアントを使用してデータを送信します)。また、必要なすべてのライブラリーをロードするために、Webページを(コントローラーと最小限のビューを使用して)組み立てます。ビューから最終的なHTMLへの変更がほとんどないWebページを構築しているので、AngularJSを他のものに置き換えることができるはずです。
免責事項:私はPHPに慣れていません。
ルーティングは問題にならないはずです。
通常、サーバーサイドMVCはすべてのルートの認証/承認を処理し、それ以外はすべてAngularJSアプリケーションによって処理されます。
クライアント側のMVC/MVVMフレームワークは、サーバー側で使用しているフレームワークから完全に分離されています。 AngualJSのバックエンドがないと、たとえば、アプリケーションでそれほど多くの機能を利用できません。バックエンドはNodeJS appまたはLaravelまたはZend Frameworkまたはその他の何でもかまいません。
あなたのアプローチは、サーバー側で[〜#〜] mvc [〜#〜]フレームワークを使用し、クライアントでMVC/MVVMを使用することは完全に有効です。しかし、あなたの質問はその意味で広範であるので、ここで言及する一般的なベストプラクティスはありません。