2015-12-24 21 views
5

私のLaravel 5.1。*プロジェクトでは、このhttps://github.com/andersao/l5-repositoryライブラリ経由でリポジトリを利用しています。データシートの場合、私はこのhttps://github.com/yajra/laravel-datatablesライブラリを使用します。これで私のコントローラの依存性注入を介してリポジトリからデータを取得できます。データセットでLaravelリポジトリを使用

namespace Admin\Http\Controllers; 

use App\Repositories\Contracts\ModuleRepository; 

class ModuleController extends Controller 
{ 
    /** 
    * @var ModuleRepository 
    */ 
    protected $repository; 

    /** 
    * ModuleController constructor. 
    * 
    * @param ModuleRepository $repository 
    */ 
    public function __construct(ModuleRepository $repository) 
    { 
     $this->repository = $repository; 
    } 

    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 
    public function index() 
    { 
     return view('admin::pages.module.index'); 
    } 

    /** 
    * Return list with module data. 
    * 
    * @return mixed 
    */ 
    public function data() 
    { 
     $modules = $this->repository->all(); 
     return $modules; 
    } 
} 

データメソッドは、インデックスページからのAjaxリクエストによって呼び出されます。

var oTable = $('#modules-table').DataTable({ 
     stateSave: true, 
     processing: true, 
     serverSide: true, 
     rowReorder: true, 
     ajax: { 
      url: '{!! url('admin/module/data') !!}', 
      type: 'POST', 
      data: { _token: '{!! csrf_token() !!}' } 
     }, 
     columns: [ 
      {data: 'sequence', name: 'sequence'}, 
      {data: 'display_name', name: 'display_name'}, 
      {data: 'active', name: 'active', orderable: false, searchable: false}, 
      {data: 'config', name: 'config', orderable: false, searchable: false} 
     ], 
     language: { 
      url: '{{ asset('/admin/localization/nl/datatable.json') }}' 
     } 
    }); 

私はこのように私のコントローラからのDataTableインスタンスを返す必要がこの作品にするために:

return Datatables::of($modules) 
     ->addColumn('active', function($module) 
     { 
      if (Config::get('modules.' . $module->name . '.active') == 1) 
       return '<a href="'. url('admin/module/' . $module->id . '/disable') .'" class="label success"><i class="fa fa-eye fa-fw"></i> Ingeschakeld</a>'; 
      else 
       return '<a href="'. url('admin/module/' . $module->id . '/enable') .'" class="label disabled"><i class="fa fa-eye-slash fa-fw"></i> Uitgeschakeld</a>'; 
     }) 
     ->addColumn('config', function($module) 
     { 
      return '<a href="'. url('admin/module/' . $module->id . '/edit') .'" class="label info"><i class="fa fa-pencil fa-fw"></i> Configuratie</a>'; 
     }) 
     ->make(true); 

のDataTableインスタンスに私のリポジトリデータを変換するのに最適な場所とは何ですが?このために変圧器を作る必要がありますか?

答えて

1

プレゼンターを作成する必要はないと思いますが、もっとシンプルにすることをお勧めします(実際には私の練習です)。

私は私のリポジトリクラスの私のDataTable実装置く:

namespace Admin\Http\Controllers; 

use App\Repositories\Contracts\ModuleRepository; 

class ModuleController extends Controller 
{ 

    protected $repository; 

    // ....... 

    /** 
    * Render a datatable instance 
    */ 
    public function datatable() 
    { 
     return $this->repository->getDatatable(); 
    } 
} 

use Prettus\Repository\Eloquent\BaseRepository; 

class MyRepository extends BaseRepository 
{ 
    // .... 

    public function getDatatable() 
    { 
     $images = $this->model->select('*'); 
     return Datatables::of($images) 
      ->addColumn('action', function ($p) { 
       return '<a class="btn btn-xs btn-danger" onclick="return confirm(\'Delete this image ?\');" href="'.action('Dashboard\\[email protected]', ['id'=>$p->id]).'"><i class="glyphicon glyphicon-remove"></i> Delete</a>'; 
      }) 
      ->addColumn('image', function ($p) { 
       return '<a href="'.$p->getMedia()[0]->getUrl().'"><img src="'.$p->getMedia()[0]->getUrl().'" class="img-responsive"></a>'; 
      }) 
      ->editColumn('created_at', '{!! $created_at->diffForHumans() !!}') 
      ->make(true); 
    } 
} 

をして、単にあなたのコントローラ上の

関連する問題