Получить текущий вид в контроллере Laravel

Что я пытаюсь сделать: Я хочу сгенерировать PDF текущего представления
Больше деталей:: У меня много клиентов, и я хочу создать кнопку на каждой странице, чтобы я мог генерировать PDF подробностей о каждом клиенте.

Пакет Laravel: https://github.com/barryvdh/laravel-dompdf

Что я сделал до сих пор:

  1. Я добавил DomPdf в свое приложение
  2. Я создал Route :: resource (‘imprimer’, ‘PrintController’); маршрут
  3. Я добавил PrintController

class PrintController extends \BaseController{

public function show(){
$pdf = PDF::loadView('clients.show');
return $pdf->stream();
}}
  1. Я включил ссылку на мой взгляд (2 версии)

{{HTML :: linkAction (‘PrintController @ show’, ‘PDF’, array (), array (‘class’ => ‘btn btn-primary pull-right mgright10’))}}

<a href="{{ URL::to('imprimer/' . $client->id) }}">Pdf2</a>

Мой вопрос: Как перейти к текущему представлению (например: clients / 1) к контроллеру, чтобы контроллер генерировал PDF текущей страницы?

1

Решение

Вы должны установить переменную, которая содержит имя текущего представления, поскольку для этого нет встроенного метода. Мы можем использовать View::composer который в основном является обратным вызовом, когда представление отображается.

View::composer('*', function($view){
View::share('view_name', $view->getName());
});

Если это влияет только на определенные виды, вы можете также ограничить его, изменив * в другую маску.

Итак, теперь вы можете сделать:

{{ HTML::linkAction('PrintController@show', 'PDF', array($view_name), array('class'=>'btn btn-primary pull-right mgright10')) }}

И получите это в вашем контроллере:

public function show($viewName){
//...
}
1

Другие решения

Я нашел как (я был близок к этому). Вот как я сделал для справки:

PrintController.php

class PrintController extends \BaseController{
public function show($id)
{
$client_id = Client::find( $id );
$html = View::make( 'clients.show' )->withClient( $client_id );
$pdf = App::make( 'dompdf' );
$pdf->loadHTML( $html );
return $pdf->stream();
}
}

Посмотреть

<a href="{{ URL::to('imprimer/'.$client->id) }}">
<button>PDF</button>
</a>

Route.php

Route::resource('imprimer', 'PrintController');
1

Мне удалось создать новый способ вызова функции «создать PDF» без добавления кода в PrintController.

PrintController.php

<?php
class PrintController extends \BaseController{

public function show( $id )
{
if( isset($id) )
{
/** remove last 2 character */
$class_name = substr( $id, 0, -2 );

/** Stay only last character */
$id = substr( $id, -1 );

if( isset($class_name) )
{
$with_method = 'with'.ucfirst( $class_name ); // withClient
$find_method = ucfirst( $class_name ); // Client
$html = View::make( $class_name .'s.show' )->$with_method( $find_method::find($id) );
}
else
{
$html = 'Data Not Found!';
}

$pdf = App::make( 'dompdf' );
$pdf->loadHTML( $html );
return $pdf->stream();
}
}
}

Посмотреть (Только клиент и $ клиент для замены)

<a href="{{ URL::to('imprimer/'.'client='. $client->id) }}" target="_blank">
<button class="btn btn-primary pull-right mgright10">PDF2</button>
</a>
1