在 Laravel Blade 中生成 HTML 链接
Generating HTML links in Laravel Blade
好的,如题所示。我想在 Laravel Blade 中生成 links。问题是,我的内容来自数据库。
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
其中我的 link 在检查元素时生成了这个。
<a href="{{ asset('public/images/projects/p1_002728.jpg') }}">
我希望我的 link 生成有点像这样的完整路径
<a href="localhost/arc/public/images/projects/p1_002728.jpg">
伙计们有什么想法吗?
我想你可以试试这个:
<a href="{{url('images/projects/p1_002728.jpg')}}">
希望这对你有用!!!
服务应该return这种数组。只需根据您的要求将路径调整为 ./ 或 ../ 即可。
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
那是行不通的。您不能 运行 php 以这种方式运行。就像回声里面的回声。
{{!! '<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]
更改为您的完整域或 public 路径。
function parseDomain($content){
$domain = asset('/');
return str_replace('[domain]',$domain,$content);
}
但是,我仍然希望您可以将 images/projects/p1_002728.jpg
保存到您的数据库中,而不是保存整个元素然后回显它。
您基本上是在数据库中存储一个 blade 模板,其中包含 Blade 和 PHP 代码。为了正确显示,这是一个必须由 Blade 模板引擎和 PHP 引擎处理的字符串。
有两种选择。
首先,您可以将字符串从数据库转储到一个临时文件,然后使用 @include
指令来包含您的临时文件。这显然会有一些开销,因为您将执行大量磁盘 I/O,具体取决于您正在处理的记录数。
其次,可以手动调用Blade处理和PHP处理。这将涉及对 eval()
的调用,但它并不比将字符串写入文件然后包含它更危险(如果 $project->Content
包含任何类型的用户输入,这两者都是危险的!).
选项二的代码如下所示:
@foreach($projectPackage as $project)
{!! eval('?>'.Blade::compileString($project->Content) !!}
@endforeach
首先,Blade::compileString()
方法将从您的数据库中获取字符串并将其从 blade 模板编译为标准 HTML/PHP.
其次,对 eval()
的调用将 运行 您的 HTML/PHP 通过 PHP 处理器和 return 结果字符串。由 eval()
处理的 blade 模板字符串必须以 ?>
开头,以 HTML 模式开始 eval()
,而不是 PHP 模式(eval()
docs here).
第三,blade {!! !!}
指令将打印出该字符串而不转义任何内容。
好的,如题所示。我想在 Laravel Blade 中生成 links。问题是,我的内容来自数据库。
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
其中我的 link 在检查元素时生成了这个。
<a href="{{ asset('public/images/projects/p1_002728.jpg') }}">
我希望我的 link 生成有点像这样的完整路径
<a href="localhost/arc/public/images/projects/p1_002728.jpg">
伙计们有什么想法吗?
我想你可以试试这个:
<a href="{{url('images/projects/p1_002728.jpg')}}">
希望这对你有用!!!
服务应该return这种数组。只需根据您的要求将路径调整为 ./ 或 ../ 即可。
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
那是行不通的。您不能 运行 php 以这种方式运行。就像回声里面的回声。
{{!! '<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]
更改为您的完整域或 public 路径。
function parseDomain($content){
$domain = asset('/');
return str_replace('[domain]',$domain,$content);
}
但是,我仍然希望您可以将 images/projects/p1_002728.jpg
保存到您的数据库中,而不是保存整个元素然后回显它。
您基本上是在数据库中存储一个 blade 模板,其中包含 Blade 和 PHP 代码。为了正确显示,这是一个必须由 Blade 模板引擎和 PHP 引擎处理的字符串。
有两种选择。
首先,您可以将字符串从数据库转储到一个临时文件,然后使用 @include
指令来包含您的临时文件。这显然会有一些开销,因为您将执行大量磁盘 I/O,具体取决于您正在处理的记录数。
其次,可以手动调用Blade处理和PHP处理。这将涉及对 eval()
的调用,但它并不比将字符串写入文件然后包含它更危险(如果 $project->Content
包含任何类型的用户输入,这两者都是危险的!).
选项二的代码如下所示:
@foreach($projectPackage as $project)
{!! eval('?>'.Blade::compileString($project->Content) !!}
@endforeach
首先,Blade::compileString()
方法将从您的数据库中获取字符串并将其从 blade 模板编译为标准 HTML/PHP.
其次,对 eval()
的调用将 运行 您的 HTML/PHP 通过 PHP 处理器和 return 结果字符串。由 eval()
处理的 blade 模板字符串必须以 ?>
开头,以 HTML 模式开始 eval()
,而不是 PHP 模式(eval()
docs here).
第三,blade {!! !!}
指令将打印出该字符串而不转义任何内容。