在laravel中使用两个控制器引用相同的变量

时间:2018-05-22 01:42:46

标签: php html sql laravel

我根据用户输入生成pdf。我可以使用all()调用数据库并获取所有合同信息。但是,我只想为其中一个值生成pdf。每份合约都有一个我可以使用的自动递增ID。

什么是在控制器之间进行通信的最佳方式,所以只有我引用的合同用于生成pdf?

PdfGenerateController:

public function pdfview(Request $request)
    {
        $users = DB::table("users")->get();
        $contract = Contract::all();

        view()->share('users',$users);

        if($request->has('download')){
            // Set extra option
            PDF::setOptions(['dpi' => 150, 'defaultFont' => 'sans-serif']);
            $users = DB::table("users")->get();

            // pass view file
            $pdf = App::make('dompdf.wrapper');
            $pdf->loadHTML

            ($contract);


            return $pdf->stream();
        }
        return view('sell.contract');
    }

合约控制人(用户输入)

public function store(Request $request)
{
    $contract = new Contract;
    $contract->buyer_first_name = $request->input('buyer_first_name');
    $contract->listing_id = $request->input('listing_id');
    $contract->save();
    return redirect()->route('generate-pdf')->with('contracts',$contract);
}

2 个答案:

答案 0 :(得分:1)

存储合约id in the session可能是您最好的选择。如果您只需要在下一个请求中使用它,那么您可以flash it(事实上,这正是redirect(..)->withInput(sessionKey, val) does)。

类似的东西:

合约控制员

public function store(Request $request)
{
    // ...
    $contract->save();
    session(['contract_id' => $contract->id]);
    return redirect()->route('generate-pdf');
}

或者只是闪烁:

public function store(Request $request)
{
    // ...
    $contract->save();
    return redirect()->route('generate-pdf')->with('contract_id', $contract->id);
}

PdfGeneratteController

public function pdfview(Request $request)
{
    $contract = Contract::findOrFail(session('contract_id'));
    // ...
}

答案 1 :(得分:0)

我可能会创建一个带有静态方法的PDF模型类来生成PDF。

class PDF
{
    public static function generatePDF($id, $isDownload)
    {
        // ...
    }
}

然后,您只需从Contact控制器调用静态方法,并将所需数据作为参数传递。

public function store(Request $request)
{
    // ...

    \PDF::generatePDF($contract->id, $request->has('download'));

    // ...
}