2015-11-26 61 views
1

我有發票控制器,它看起來像這樣如何Laravel5使用控制器的另一個控制器內的服務

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Input; 
use App\Event; 
use App\Employee; 
use App\Invoice; 
use Mail; 
use View; 

class ViewinvoiceController extends Controller 
{ 
    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function getIndex($order_id) 
    { 
     $id=$order_id; 

     $invoicedata=Invoice::where('Id',$id)->get(); 


    $html22 = View('viewinvoice')->with(array('invoicedata'=>$invoicedata))->render(); 

    require_once(app_path().'/libs/html2pdf/html2pdf.class.php'); 


     $html2pdf = new \HTML2PDF('P','A4','en',true,'UTF-8',array(0, 0, 0, 0)); 

     // $html2pdf->pdf->SetDisplayMode('fullpage'); 

     $html2pdf->WriteHTML($html22); 

    $html2pdf->Output('Invoice.pdf'); 


    } 

} 

我想用這個控制器的其它控制器,它看起來像這樣

class CollectionController extends Controller 
    { 

     public function __construct(){ 

    $this->middleware('role:collector'); // replace 'collector' with whatever role you need. 
     } 
     public function getInvoice($order_id){ 
     //Here I have to write the logic of getting the invoice from the invoiceController 
} 

} 

我用Google搜索,發現了一個辦法是寫一個服務來獲得發票,

我可以把它作爲一個正常的類作爲服務,但我不知道什麼在laravel正道5

任何建議

+0

控制器的類名具有相同名稱的文件名。所以你將不得不使用兩個不同的控制器文件來處理不同的控制器。 –

+0

@AjitKumarSingh你可以請詳細說明這一點,實際上Laravel直接在另一個控制器中使用控制器並不是正確的方式,因爲它爲'Injection'打開方式,我讀了一些使用php 5的地方。可以這樣做,或者我們可以在Laravel中編寫服務,但我不知道其中的任何一個如何實現 – Vikram

+0

這是發生的情況,當您調用控制器時,如果存在控制器,則會檢查route.php。如果是,則調用與調用的控制器名稱具有相同名稱的文件。您的控制器的類名和文件名應該相同,才能被調用。但是,如果你想使用另一個類,你將不得不在其他類中創建對象(但是這是用java編寫的,我沒有在php中使用它,所以不知道)。 –

回答

0

你可以把這個特質您App\Services內,並保存該文件名ViewinvoiceTrait.php

<?php 
namespace App\Services; 

use App\Invoice; 
use View; 

trait ViewinvoiceTrait { 

    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function getIndex($order_id) { 
     $id = $order_id; 

     $invoicedata = Invoice::where('Id', $id)->get(); 


     $html22 = View('viewinvoice')->with(array('invoicedata' => $invoicedata))->render(); 

     require_once(app_path() . '/libs/html2pdf/html2pdf.class.php'); 


     $html2pdf = new \HTML2PDF('P', 'A4', 'en', true, 'UTF-8', array(0, 0, 0, 0)); 

     // $html2pdf->pdf->SetDisplayMode('fullpage'); 

     $html2pdf->WriteHTML($html22); 

     return $html2pdf->Output('Invoice.pdf'); 
    } 

} 

和你的控制器中使用類似的

use App\Services\ViewinvoiceTrait; 

class CollectionController extends Controller 
    { 

    use ViewinvoiceTrait; 

    public function __construct(){ 
     $this->middleware('role:collector'); // replace 'collector' with whatever role you need. 
    } 

    public function getInvoice($order_id){ 
      $data = $this->getIndex($order_id); 
    } 

} 
+0

@Uchicha是否需要在config/app/php?/ \中註冊服務? – Vikram

0

使用控制器的另一個控制器內作爲對設計標準,如果你認爲你有一些功能需要在幾個控制器或位置被觸發,來這裏的Jobs

查看更多about Laravel工作here。作業可以同步或異步運行,這取決於您的應用程序。

相關問題