Ссылка на одну и ту же переменную с использованием двух контроллеров в laravel - PullRequest
0 голосов
/ 22 мая 2018

Я генерирую PDF на основе ввода пользователя.Я могу вызвать базу данных и получить ВСЕ данные контракта, используя all ().Тем не менее, я хотел бы только создать PDF для одного из значений.Каждый контракт имеет идентификатор автоматического увеличения, который я мог бы использовать.

Каков наилучший способ связи между контроллерами, поэтому для создания 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 голосов
/ 22 мая 2018

Я бы, вероятно, создал класс модели PDF со статическим методом для генерации PDF.

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

Тогда вы могли бы просто вызвать статический метод из контроллера Contact и передать необходимые данные в качестве параметров.

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

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

    // ...
}
0 голосов
/ 22 мая 2018

Хранение контракта id в сеансе , вероятно, является вашей лучшей ставкой.Если вам нужно использовать его только при следующем запросе, вы можете просто прошить (на самом деле, именно это redirect(..)->withInput(sessionKey, val) делает ).

Что-товот так:

Контроллер Контроля

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'));
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...