2016-09-02 7 views
1

Laravel 5のコントローラから複数のビューに配列を渡す方法について質問がありますが、それは可能ですか?私はindex.blade.phpに配列を渡し、一つの関数index()からhome.blade.phpに渡したいと思います。インデックスページにはすべてのデータが表示され、ホームページにはいくつかのデータしか表示されません。ここで以下のコードは、1つのコントローラから複数のビューにアレイを渡す? Laravel 5

コントローラー:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Requests\EdisiRequest; 
use App\Edisi; 
use Session; 
use Storage; 

class EdisiController extends Controller 
{ 
    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     $edisi_list = Edisi::all(); 
     return view('edisi/index', compact('edisi_list')); 
    } 
} 

home.blade.php

@extends('template') 

@section('main') 
<div class="container sitecontainer bgw"> 
    <div class="row"> 
     <div class="col-md-12 col-sm-12 col-xs-12 m22 single-post"> 
      @if (count($edisi_list) > 0) 
      <div class="reviewlist review-posts"> 
       <?php foreach ($edisi_list as $edisi): ?> 
        <div class="post-review col-md-4 col-sm-12"> 
         <div class="post-media entry"> 
          <a href="#" title=""> 
           <img src="{{ asset('fotoupload/' . $edisi->cover) }}" alt="fotoupload/coveredisi.png" class="img-responsive" style="height: 480px; width: 1200px;"> 
          </a> 
         </div><!-- end media --> 
         <div class="post-title"> 
          <h4 style="text-align: center;"><a href="#">{{ $edisi->judul }}</a></h4> 
         </div><!-- end post-title --> 
        </div><!-- end post-review --> 
       <?php endforeach ?> 
      </div><!-- end review-posts --> 
      @else 
      <p>Tidak ada data edisi.</p> 
      @endif 
     </div><!-- end col --> 
    </div><!-- end row --> 

    <div class="row"> 
     <div class="pagination-wrapper text-center"> 
      <nav> 
       <ul class="pagination"> 
        <li> 
         <a href="#" aria-label="Previous"> 
          <span aria-hidden="true">&laquo;</span> 
         </a> 
        </li> 
        <li><a href="#">1</a></li> 
        <li><a href="#">2</a></li> 
        <li><a href="#">3</a></li> 
        <li><a href="#">4</a></li> 
        <li><a href="#">5</a></li> 
        <li> 
         <a href="#" aria-label="Next"> 
          <span aria-hidden="true">&raquo;</span> 
         </a> 
        </li> 
       </ul> 
      </nav> 
     </div> 
    </div> 
</div><!-- end container --> 
@stop 

私は別のコントローラを作ることによって試み

@extends('template') 

@section('main') 
<div class="container sitecontainer bgw"> 
    <div class="row"> 
     <div class="col-md-12 col-sm-12 col-xs-12 m22 single-post"> 
       <div id="siswa"> 
       <h2>Daftar Edisi</h2> 

       @if (count($edisi_list) > 0) 
       <table class="table"> 
        <thead> 
         <tr> 
          <th>Judul</th> 
          <th>Action</th> 
         </tr> 
        </thead> 
        <tbody> 
         <?php foreach ($edisi_list as $edisi): ?> 
          <tr> 
           <td>{{ $edisi->judul }}</td> 
           <td> 
            <div class="box-button"> 
             {{ link_to('edisi/' . $edisi->id, 'Detail', ['class' => 'btn btn-success btn-sm']) }} 
            </div> 
            <div class="box-button"> 
             {{ link_to('edisi/' . $edisi->id . '/edit', 'Edit', ['class' => 'btn btn-warning btn-sm']) }} 
            </div> 
            <div class="box-button"> 
             {!! Form::open(['method' => 'DELETE', 'action' => ['[email protected]', $edisi->id]]) !!} 
             {!! Form::submit('Delete', ['class' => 'btn btn-danger btn-sm']) !!} 
             {!! Form::close() !!} 
            </div> 
           </td> 
          </tr> 
         <?php endforeach ?> 
        </tbody> 
       </table> 
       @else 
       <p>Tidak ada data edisi.</p> 
       @endif 

       <div class="tombol-nav"> 
        <a href="edisi/create" class="btn btn-primary">Tambah Edisi</a> 
       </div> 
      </div> <!--/#jurnal --> 
     </div><!-- end col --> 
    </div><!-- end row --> 
</div><!-- end container --> 
@stop 

index.blade.phpホームページはまだ動作していませんが、エラー "$ edisi_list undefined variable"が表示されます。それに別の方法がある場合は、私に見せてください、ありがとう!

EdisiServiceProvider.php

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use App\Edisi; 

class EdisiServiceProvider extends ServiceProvider { 

    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() { 
     View::composer(['edisi/index', 'pages/home'], function ($view) { 
      $edisi_list = Edisi::all(); 
      $view->with('edisi_list', $edisi_list); 
     }); 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() { 
     // 
    } 

} 

答えて

2

あなたはそれを行うためにview composerを使用することができます。

View::composer(['index', 'home'], function ($view) { 
    $edisi_list = Edisi::all(); 
    $view->with('edisi_list', $edisi_list); 
}); 
+0

これを使用することによりので、私は新しいサービスプロバイダを作成する必要がありますか?私を許してください、しかし、このコードをどこに置くのですか? @alexey –

+0

はい、サービスプロバイダを作成する必要があります。上のリンクをたどってサンプルコードを見つけることができます。クロージャを使用したくない場合は、ビューコンポーザークラスも作成する必要があります。 –

+1

さて、ありがとう男 –

関連する問題