我尝试做什么:我想生成当前视图的PDF 更多详细信息::我有很多客户,我想在每个页面上创建一个按钮,以便生成每个客户详细信息的PDF。
Laravel套餐:https://github.com/barryvdh/laravel-dompdf
到目前为止我做了什么:
class PrintController extends \BaseController{
public function show(){
$pdf = PDF::loadView('clients.show');
return $pdf->stream();
}}
{{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?
答案 0 :(得分: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 :(得分: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');
答案 2 :(得分: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();
}
}
}
查看(仅限客户端和$ client重新加入)
<a href="{{ URL::to('imprimer/'.'client='. $client->id) }}" target="_blank">
<button class="btn btn-primary pull-right mgright10">PDF2</button>
</a>