【问题标题】:Reference same variable using two controllers in laravel在 laravel 中使用两个控制器引用相同的变量
【发布时间】:2018-10-31 16:31:37
【问题描述】:

我正在根据用户输入生成一个 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);
}

【问题讨论】:

    标签: php html sql laravel


    【解决方案1】:

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

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

    然后您可以简单地从 Contact 控制器调用静态方法并将所需的数据作为参数传递。

    public function store(Request $request)
    {
        // ...
    
        \PDF::generatePDF($contract->id, $request->has('download'));
    
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      存储合约 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'));
          // ...
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 2016-12-13
        • 2019-09-10
        • 1970-01-01
        相关资源
        最近更新 更多