2013-07-12 37 views
5

Tôi đang cố gắng tải tệp lên điểm cuối của bên thứ ba, nhưng tôi không thể đăng tệp trực tiếp từ biểu mẫu của tôi vì API yêu cầu api_key mà tôi có thể ' t tiếp xúc với người dùng cuối. Do đó, kế hoạch của tôi là trỏ biểu mẫu đến một bộ điều khiển/hành động và đăng dữ liệu từ đó lên đó. Tuy nhiên, khi tôi debug($this->request->data) từ bên trong bộ điều khiển, dữ liệu tệp bị thiếu.CakePHP: dữ liệu tệp đã đăng không được bao gồm trong yêu cầu-> dữ liệu

Hình thức trên quan điểm:

echo $this->Form->create('Media', array('type'=>"file", 'url'=>array('controller'=>'media', 'action'=>'upload'))); 
echo $this->Form->input('name', array("name"=>"name")); 
echo $this->Form->input('file', array('type'=>'file', "name"=>"file")); 
echo $this->Form->input('project_id', array('type'=>'hidden', "name"=>"project_id", "value"=>$project["Project"]['hashed_id'])); 
//THIS CANNOT BE HERE: echo $this->Form->input('api_password', array('type'=>'hidden', "name"=>"api_password", "value"=>'xxxxxxx')); 
echo $this->Form->end("Submit"); 

Đây là những gì những gì tôi thấy khi debug() dữ liệu yêu cầu từ bộ điều khiển:

array(
    'name' => 'Some Name', 
    'project_id' => 'dylh360omu', 
) 

gì đang xảy ra ở đây?

+0

bạn đã thử chính xác chưa, nhưng không thay đổi tên đầu vào? – Nunser

+2

Bạn đã thử xem cái gì trong $ this-> yêu cầu? 'debug ($ this-> request) 'Dữ liệu tập tin dữ liệu tôi được quản lý bên ngoài dữ liệu yêu cầu. – usumoio

+0

tệp lớn bao nhiêu và kích thước đó có được phép bởi upload_max_filesize và chỉ thị max_post_size không? –

Trả lời

6

dữ liệu tập tin tải lên chỉ có thể được tìm thấy trong CakeRequest::data trong trường hợp tên yếu tố đầu vào được thông qua trong một mảng có tên data (đó là mặc định khi không xác định một tên cụ thể bằng tay), ví dụ:

<input type='file' name='data[file]'> 

Trong trường hợp của bạn tuy nhiên, phần tử sẽ trông giống như sau:

<input type='file' name='file'> 

sẽ khiến dữ liệu tệp được đặt trong CakeRequest::params[form].

https://github.com/cakephp/cakephp/blob/2.4.0/lib/Cake/Network/CakeRequest.php#L346

Vì vậy, hoặc thay đổi tên theo hình thức phù hợp:

$this->Form->input('file', array('type' => 'file', 'name' => 'data[file]')); 

Hoặc truy cập dữ liệu tập tin qua CakeRequest::params[form]:

debug($this->request->params['form']); 
+0

tuyệt vời! Làm thế nào để bạn tìm ra điều này? – yuchaozh

+0

Bằng cách xem mã nguồn @yuchaozh – ndm

0

Nunser đã đúng (như mọi khi) ! Vấn đề phát sinh từ việc tùy chỉnh tên của đầu vào. Khi tôi xóa 'name'=>'...' khỏi mảng tùy chọn, tệp sẽ hiển thị như mong đợi. Điều này có vẻ như một lỗi, nhưng nếu ai đó có một lời giải thích tốt hơn tôi rất muốn nghe nó.

+0

Xin chào. Tôi rất vui vì giờ đang làm việc. Câu trả lời của ndm có vẻ là lý do cho vấn đề, mặc dù.Nó không phải là một lỗi như ông giải thích, chỉ là "cái gì đó xảy ra". – Nunser

+0

Cảm ơn. Tôi đọc lại câu trả lời đó và bạn nói đúng (một lần nữa). – emersonthis

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