2013-05-19 36 views
18

Tôi đang cố gắng tạo một biểu mẫu cho phép tải lên tệp và lưu trữ nó trong thư mục công cộng/tải lên của ứng dụng.Laravel 4 hình thức tải lên hình thức

hình thức của tôi là:

<form action="/image/save" method="post"> 
<input name="image" type="file" /> 
<input type="submit" value="Save"/> 
</form> 

và bộ điều khiển:

public function save(){ 
$file = Input::file('image'); 
$destinationPath = 'upload/'; 
$filename = $file->getClientOriginalName(); 
Input::file('image')->move($destinationPath, $filename); 

Nhưng khi tôi chạy nó tôi nhận được lỗi sau: Gọi để một hàm thành viên getClientOriginalName() vào một tổ chức phi vật thể

+0

Bạn đang sử dụng $ file-> getClientOriginalName(). Nó không liên quan gì đến $ file – Aristona

Trả lời

38

Bạn cần bật số file input trên biểu mẫu. (Doc)

Trong Laravel, bạn có thể sử dụng:

Form::open('image/save', array('files'=> true)) 

hoặc

<form action="/images/save" method="post" enctype="multipart/form-data"> 

Nếu tất cả các bạn nhận được từ các tập tin đầu vào là tên tập tin như là một chuỗi.

+0

nhưng tôi không hiểu bạn phải viết cái này ở đâu? – Ruben

+1

Trong chế độ xem của bạn thay vì thẻ HTML

. –

+1

Câu hỏi: bạn tìm thấy ở đâu trong tài liệu '' tệp '=> true'? Tôi đã tìm kiếm trong phần Biểu mẫu & Nhập liệu nhưng tôi không tìm thấy gì .. – Val

2

Bạn có để có được tên tập tin như sau:

//Blade form 
{{ Form::open_for_files('/image/save') }} 
{{ Form::file('image') }} 
{{ Form::close() }} 

//get imagename 
$filename = Input::file('image.name'); 

Chúc may mắn! :)

8

Tôi cũng phải đối mặt với cùng một vấn đề với một trong các hình thức của tôi, vấn đề là hình thức không được định nghĩa với tùy chọn, 'files' => true, mà nói với các hình thức helper Laravel4 để xác định một mẫu với enctype="multipart/form-data"

đây là những gì tôi đã làm:

xác định các mảng sau đây trong điều khiển của bạn và vượt qua nó để xem bạn,

$form_options = array (
    'url' => 'path/to/defined/route', 
    'class' => 'form-horizontal', 
    'name' => 'newUser', 
    'files' => true 
); 

theo quan điểm của bạn, xác định hình thức của bạn như sau:

{{ Form::open($form_options) }} 

Điều đó sẽ xác định hình thức của bạn với enctype="multipart/form-data"

+0

Tôi quên nói các tập tin; Tôi đã có tập tin! Stupid me – Eenvincible

11

Nếu bạn không sử dụng Blade cho tạo mẫu của bạn như thế này

{{ Form::open(array('url' => 'foo/bar', 'files' => true)) }} 

Chỉ cần thêm tham số này vào thẻ mẫu của bạn

enctype="multipart/form-data" 
+0

''files' => true', đó là những gì tôi đang tìm kiếm. – AmirMasoud

1

Bạn chỉ có thể thêm trường 'files'=> true vào array() nếu bạn sử dụng kiểu dáng của Laravel giống như

{{ Form::open(array('url'=>'/images/save','role'=>'form','files'=> true)) }} 

nếu không bạn có thể sử dụng html mẫu thẻ giống như

<form action="/images/save" method="post" enctype="multipart/form-data"> 

Hy vọng điều này sẽ giúp bạn.

Các vấn đề liên quan