2017-08-09 83 views
0

好的,來自標題說。我想在Laravel Blade中生成鏈接。捕捉,我的內容來自數據庫。在Laravel Blade中生成HTML鏈接

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') }}"> 

我希望我的鏈接產生的完整路徑是有點像這個

<a href="localhost/arc/public/images/projects/p1_002728.jpg"> 

任何想法的傢伙?

+0

在引用本地資源時,絕不應該使用「public」這個詞。嘗試'資產(「圖像/項目/ p1_002728.jpg」)' – apokryfos

回答

0

你基本上在你的數據庫中存儲了一個刀片模板,它包含刀片和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)。

第三,刀片{!! !!}指令將打印出該字符串而不會轉義任何東西。

-1

我想你可以試試這個:

<a href="{{url('images/projects/p1_002728.jpg')}}"> 

希望這對你的工作!

+0

不起作用:( – drake24

-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 
1

這不會奏效。你不能以這種方式運行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]更改爲全域或公共路徑。

function parseDomain($content){ 
    $domain = asset('/'); 
    return str_replace('[domain]',$domain,$content); 
} 

但是,我希望你可以只保存images/projects/p1_002728.jpg到數據庫而不是保存整個元素,然後呼應它。