2014-09-26 58 views
2

在Laravel我有一個資源控制器,我需要處理圖片上傳。在我create.blade.php我有以下形式:Laravel上傳文件到資源

{{ Form::open(array('action' => '[email protected]', 'method' => 'post')); }} 
{{Form::text('text'); }} 
{{Form::file('photo');}} 
{{Form::submit('Submit');}} 
{{ Form::close() }} 

在我PhotoController我有以下的存儲功能

public function store() 
{ 
    if (Input::hasFile('photo')) 
    { 
     return 'Got the photo'; 
    } 
    else { return Input::get('text'); } 
} 

從外地「文本」輸入返回,但是它確實似乎不像Laravel可以找到我上傳的照片。 我試圖改變方法來放置和創建一個自定義函數來處理這個,但有相同的結果。我爲什麼不能讓Laravel認識到我已經附加了一個文件?

在此先感謝

回答

2

你需要像這樣

{{ Form::open(array('action' => '[email protected]', 'method' => 'post', 'files' => true, 'enctype' =>"multipart/form-data")); }} 

添加'files' => true'enctype' =>"multipart/form-data"到表單至於這取決於你在做什麼的POSTPUT選項。在使用store資源方法時,應該使用POST。如果您打算使用update方法,那麼您將使用PUT

對於資源控制器的方法和HTTP請求,這樣的工作

+-------------------+-------------+ 
| Controller method | HTTP Method | 
+-------------------+-------------+ 
| index    | GET   | 
| create   | GET   | 
| store    | POST  | 
| show    | GET   | 
| edit    | GET   | 
| update   | PUT/PATCH | 
| destroy   | DELETE  | 
+-------------------+-------------+ 

的困惑的有createedit,你可能會認爲應該是POST但要記住這是該網頁「獲取」的形式,以編輯或創建一個項目。

一旦你有你的文件,你將需要做一些事情。因此,下次你會想要做的文件的東西,所以你需要在這些

$photo = Input::file('photo'); 
$photo->move($destinationPath, $fileName); 

文檔和所有其他Input::file()方法可以在Laravel documentation here找到。

+0

工程就像一個魅力。尚未測試移動功能 - 但現在註冊了我已上傳文件,並在附件時返回「獲取照片」。 謝謝 – user3501066 2014-09-26 18:12:06

0
{{ Form::open(array('route' => 'images.store', 'role' => 'form', 'files' => true)) }} 

這是我用我的文件上傳表單,我沒有'enctype''method',我指向一個路徑,而不是一個行動。

這是它轉換到HTML:

<form method="POST" action="action url" accept-charset="UTF-8" role="form" enctype="multipart/form-data"><input name="_token" type="hidden" value="token value"> 

正如你可以看到'enctype''method'Form::open輔助函數添加。 role="form"用於Bootstrap以正確格式化表單。

關於HTML和表格:http://laravel.com/docs/4.2/html

+0

工程非常好。與DavidT相比,這種解決方案的優勢是什麼? – user3501066 2014-09-26 18:15:38

+0

真的沒有什麼優勢,只是指出一些參數是可選的,並且使用路線而不是動作。這不是「另一種解決方案」,我們都指出了相同的情況。他的回答非常好:) – 2014-09-26 18:18:21

+0

非常感謝:-) – user3501066 2014-09-27 20:38:29