好吧,从标题上说。我想在Laravel Blade中生成链接。抓住了,我的内容来自数据库。
<table>
<tr >
<td>
{{benefits.BenefitId}}
</td>
</tr>
</table>
我的控制器
Id | Content | Status
1 | <a href="{{ asset('public/images/projects/p1_002728.jpg') }}"> | A
和我的观点
public static function ViewPerProject()
{
$data = Projects::GetProjectDetails();
return view('works.project1', ['projectPackage' => $data]);
}
当我检查元素时,我的链接会生成这个。
@foreach($projectPackage as $project)
{!! $project->Content !!}
@endforeach
我希望我的链接生成完整路径,有点像这样
<a href="{{ asset('public/images/projects/p1_002728.jpg') }}">
任何想法的人?
答案 0 :(得分:1)
那不行。你不能以这种方式运行PHP功能。这就像echo里面的回声。
{{!! '<a href="{{ asset('images/projects/p1_002728.jpg') }}">' !!}
如果您真的想出于某种原因保存到数据库的链接,为什么不这样保存:
<a href="[domain]public/images/projects/p1_002728.jpg">
这类似于Wordpress的短代码。
因此,在显示数据之前,您需要准备它。将数据传递给解析器。
@foreach($projectPackage as $project)
{!! parseDomain($project->Content) !!}
@endforeach
创建一个帮助程序,将[domain]
更改为完整的域或公共路径。
function parseDomain($content){
$domain = asset('/');
return str_replace('[domain]',$domain,$content);
}
但是,我希望您可以将images/projects/p1_002728.jpg
保存到您的数据库,而不是保存整个元素,然后回显它。
答案 1 :(得分:0)
您基本上将刀片模板存储在数据库中,其中包含Blade和PHP代码。为了正确显示,这是一个必须由Blade模板引擎以及PHP引擎处理的字符串。
有两种选择。
首先,您可以将数据库中的字符串转储到临时文件,然后使用@include
指令包含临时文件。这显然会产生一些开销,因为您将执行大量磁盘I / O,具体取决于您正在处理的记录数。
其次,您可以手动调用刀片处理和PHP处理。这将涉及对eval()
的调用,但它不比将字符串写入文件然后包含它更危险(如果$project->Content
包含任何类型的文件,则两者都是危险的用户输入!)。
选项二的代码如下:
@foreach($projectPackage as $project)
{!! eval('?>'.Blade::compileString($project->Content) !!}
@endforeach
首先,Blade::compileString()
方法将从您的数据库中获取字符串,并将其从刀片模板编译为标准HTML / PHP。
其次,对eval()
的调用将通过PHP处理器运行您的HTML / PHP并返回结果字符串。由eval()
处理的刀片模板字符串必须以?>
开头,以HTML模式启动eval()
,而不是PHP模式(eval()
docs here)。
第三,刀片{!! !!}
指令将打印出该字符串而不会转义任何内容。
答案 2 :(得分:-1)
我想你可以试试这个:
<a href="{{url('images/projects/p1_002728.jpg')}}">
希望这对你有用!!!
答案 3 :(得分:-1)
服务应该返回这种数组。只需根据您的要求调整./或../的路径。
public static function ViewPerProject()
{
$package = ['./images/projects/p1_002728.jpg','./images/projects/p1_002728.jpg']
$this->data['projectPackage'] = $package;
$this->data['someOtherData_1'] = [];
$this->data['someOtherData_2'] = "test";
return view('works.project1')->with('data',$this->data);
}
在视图中你可以这样使用。
@foreach($projectPackage as $data['projectPackage'])
<a href="{{$projectPackage}}"></a>
@endforeach