在Laravel Blade中生成HTML链接

时间:2017-08-09 06:04:06

标签: html laravel laravel-blade

好吧,从标题上说。我想在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') }}"> 

任何想法的人?

4 个答案:

答案 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