2017-01-25 7 views
0

私はLaravel 5.4アプリケーションに入るさまざまなコンポーネントを持っており、各ページはこれらのコンポーネントを使用して構築されています。各コンポーネントには独自のロジックがあり、APIコール(キャッシュされます)などがあります。ビューを構築するコンポーネントとしてlaravelコントローラを使用する

各コンポーネントコントローラはロジックを経てビューを返します。ここで

は、コントローラ例です:

class ExampleController 
{ 
    public function index() 
    { 
     $projects = Api::create()->get('project/1234') 
     return View::make('Pages::components.projectList') 
      ->with('projects', self::$projects); 
    } 
} 

私が何をしたいのか、様々なコンポーネントを一緒に持って来る各ページの「マスター」コントローラを作成することです。以下のような

何か:

return [email protected] . [email protected]

その後、私は、静的なビューが動作しません構築、ユーザーがこれらのコンポーネントを使用して、自分のページを構築することができるようにしたいです。コンポーネントコントローラはとなり、常にが返されます。

これはLaravelでどのように行われますか?私は問題をすべて間違って考えていますか?

+0

これは可能です。しかし、それはあなたがお勧めするものではありません。 私が正しく理解している場合は、コントローラのページのコンポーネントを作成し、部分的なビューをマージして完全なビューを作成したいとします。私はあなたを正しく理解していますか? –

+0

私はあなたを正しく理解していれば、よりよい建築を提案することができます。私が間違っている場合、どこに落ちているか教えてください。 –

+0

それは正しいです。部分的なビューは独自のコントローラによって構築されており、それらを結合して完全なビューを作成したいと考えています。より良いアーキテクチャは何でしょうか? –

答えて

0

Laravelのドキュメントにおけるいくつかの掘削した後、それを行うにはきれいな方法であると思わ:

class HomeController extends Controller 
{ 
    public function index() 
    { 
     $projectList = (new ProjectListController())->index(); 
     $searchBox = (new SearchBoxController())->index(); 

     return view("App::index") 
      ->with('projectList', $projectList) 
      ->with('searchBox', $searchBox); 
    } 
} 

インデックスメソッドはビューを返すコントローラの主な方法です。

これを行うには、各コンポーネントコントローラがHTMLビューのみを返す必要がありますが、これはアプリで正常に機能しています。

0

私はこのアーキテクチャを参照するためにLaravel 5.3を使用します。あなたは次のことにデータを配布する必要があります。

  1. ビュー(https://laravel.com/docs/5.3/views
  2. モデル(https://laravel.com/docs/5.3/eloquent
  3. コントローラ(https://laravel.com/docs/5.3/controllers
  4. ブレイドテンプレート化(https://laravel.com/docs/5.3/blade

何あなたはビュー自体を追加していますか?このロジックを使用すると、ビュー内のHTMLを把握することができなくなります。代わりに、ビューのブレードテンプレートを使用します。ビューを結合する方法を理解するには、ブレードテンプレートの「レイアウトの拡張」を参照してください。 第2に、データを取得して渡すために、コントローラを使用してモデルを使用します。

たとえば、このStackOverflowの最初のページを考えてみましょう。このページには、ヘッダー(画像、名前などを使用する)、本文、およびフッターが含まれます。ボディには、より多くのプロファイルデータがあります。 それでは、ブレードテンプレートを作成して、 "resources/views/layouts/homepage.blade.php"に保存されているhomepage.blade.phpとして保存します。

@extend ('header_profile') 
<body> 
    <p> 
     @yield('message) 
    </p> 
    <footer> 
     End Page 
    </footer> 
</body> 

は今、コントローラを作成homepage.php "UserDataを" と "DetailedUserInformation" はデータベースからデータを取得するための責任がある雄弁モデルです

<?php namespace App\Http\Controllers; 

class CommunityController extends Controller { 

    public function renderHomePage($user_id) { 
     $userData = UserData::where('user_id', $user_id); 
     $detailedUserData = DetailedUserInformation::where('user_id', $userData -> foreign_key_joiner); 
     return view('homepage', ["main_info" => $userData, "personal_info" => $detailedUserData]); 
    } 

} 

さて、何を得たことだった。

  1. 作成モデルを使用して、異なるコントローラに何度も何度もそれらを使用するのに役立ちます。したがって、クエリーの作成を何度も繰り返す必要はありません。
  2. 次に、ブレードテンプレートを使用すると、壊れないHTMLを作成するのに役立ちます。コントローラに何度も何度も追加する場合、1つのタグがすべてを破る可能性があります。したがって、1回テストして何回か使用することができます。

このアーキテクチャを使用してください。これは長期的にはより良い持続可能性を持ち、コードを何度も繰り返し使用することで削減されます。

関連する問題