2017-02-05 30 views
0

我使用的是基於Laravel的OctoberCMS。如何使用表單刪除文件?

我試圖刪除一個文件。我在文本框中輸入文件名,然後按提交。

零件形狀

<form method="POST" action="{{ url('/purge') }}"> 
    <input type="hidden" name="_handler" value="onPurge" /> 
    {{ form_token() }} 
    {{ form_sessionKey() }} 

    <input type="text" name="filename" /> 

    <input type="submit" name="submit" value="Purge" /> 
</form> 

組件PHP

public function onPurge(){ 
    $name = $_POST['filename']; 

    if (!empty($_POST['submit'])) { 
     $file->delete(storage_path("app/media/$name")); 
    } 
} 

錯誤

Non-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically 

我試圖

public function onPurge(){ 
    $name = $_POST['filename']; 

    if (!empty($_POST['submit'])) { 
     $file = new Video(); 
     $file->delete(storage_path("app/media/$name")); 
    } 
} 

(也有完整的路徑在/ var/WWW/mysite的/公/)

功能完成,沒有錯誤,但文件不會刪除。

+0

作爲一個調試問題,我建議你首先檢查你是否正在獲取文件,如果存在與File :: exists()存在,如果存在,你可以直接使用你自己的代碼。附:改變你的路徑到絕對$ path = public_path()。「/ storage/app/media /」類似的東西或檢查文件的路徑。 – rahulsm

+0

@rahul_m我調整了我的代碼路徑。文件不會刪除,但我得到的返回true:if(File :: exists(storage_path(「app/media/$ name」))){echo「File Exists」; } –

+1

good pass File :: delete(storage_path(「app/media/$ name」)));並嘗試一次 – rahulsm

回答

1

你清除功能應該是這樣的,

public function onPurge(){ 
    $name = $_POST['filename']; 
    $file_path = storage_path("app/media/$name"); 
    if(File::exists($file_path)){ // OR \File::exists($file_path) 
    File::delete($file_path); // OR \File::delete($file_path) 
    } 
} 

我覺得它應該工作。

試試看。

+0

請不要直接訪問'$ _POST'超級全局變量很難測試它 – OsDev

+1

我知道我的隊友,我寧願在每個控制器方法內建議$ request變量。但我認爲OP的可行性 – rahulsm

1

您可以使用php函數取消鏈接。

if (!empty($_POST['submit'])) { 
    $removed = unlink($path . $file); 
}if(!$removed) { 
    die('file could not be deleted'); 
} 
+0

我得到錯誤調用未定義的方法October \ Rain \ Database \ QueryBuilder :: unlink() –