2015-12-01 27 views
3

目標:如果文件存在,請加載文件,否則加載default.png確定Laravel中是否存在文件5


我已經試過

@if(file_exists(public_path().'/images/photos/account/{{Auth::user()->account_id}}.png')) 
    <img src="/images/photos/account/{{Auth::user()->account_id}}.png" alt=""> 
    @else 
    <img src="/images/photos/account/default.png" alt=""> 
    @endif 

結果

它不停地載入我默認形象,而我100%肯定1002.png是存在的。

如何正確檢查該文件是否存在?

+0

您回聲public_path的'()的結果'/圖片/照片/帳戶/ {{驗證::用戶() - > ACCOUNT_ID} } .png''並檢查它是否是有效的路徑。如果是,那麼你去看看它是否真的存在。你已經知道它沒有,電腦不撒謊。 –

+0

@RyanVincent:return'false'。 – ihue

+0

你確定你明白嗎?你無法得到它。 –

回答

4

解決方案

 @if(file_exists(public_path().'/images/photos/account/'.Auth::user()->account_id.'.png')) 
     <img src="/images/photos/account/{{Auth::user()->account_id}}.png" alt=""> 
     @else 
     <img src="/images/photos/account/default.png" alt=""> 
     @endif 
+0

爲什麼「@」命令之前? –

16

只要可以,儘量減少的if語句的數量。例如,我會執行以下操作:

\\ User Model 
public function photo() 
{ 
    if(file_exists(public_path() . '/images/photos/account/' . $this->->account_id . '.png')) { 
     return '/images/photos/account/' . $this->account_id .'.png'; 
    } else { 
     return '/images/photos/account/default.png'; 
    }  
} 

\\ Blade Template 
<img src="{!! Auth::user()->photo() !!}" alt=""> 

使您的模板更清潔並使用更少的代碼。你也可以寫上該方法的單元測試來測試你的發言以及:-)

0

保存的文件中database.If圖像路徑存在

<?php 
$path = "packages/pathoffile/img/media/" . $filename; 
$media = isset($media) ? $media : ""; //If media is saved 
?> 
@if($media == "") 
<img src='../packages/defaultimagelocation/assets/img/user.png' /> 
@else 
<img src='../packages/originalmedialocation/img/media{{ $media }}' /> 
@endif 
6

檢查文件上動作的存在與 「文件::」 和resut傳遞給視圖

$result = File::exists($myfile); 
0

在Laravel 5.5,您可以使用存儲門面exists方法:

https://laravel.com/docs/5.5/filesystem

$exists = Storage::disk('s3')->exists('file.jpg'); 

你可以使用一個三元表達式:

$file = ($exists) ? Storage::disk('s3')->get('file.jpg') : 
     Storage::disk('s3')->get('default.jpg');