Thursday, February 25, 2010

Re: Multiple file Upload through related model (CakePHP bug?)

I found a solution by myself! :D

Analysing the cakephp dispatcher (dispatcher.php) I found that it
doesn't have support for this kind of multiple upload.

I'm using 1.2.5 version. At line 312 of dispatcher.php starts a
verification for file data:

if (isset($_FILES['data'])) {
foreach ($_FILES['data'] as $key => $data) {
foreach ($data as $model => $fields) {
if (is_array($fields)) {
foreach ($fields as $field => $value) {
if (is_array($value)) {
foreach ($value as $k => $v) {
$params['data'][$model][$field][$k][$key] = $v;
}
} else {
$params['data'][$model][$field][$key] = $value;
}
}
} else {
$params['data'][$model][$key] = $fields;
}
}
}
}

this is the original structure.

I made a modification inside the deepest foreach (line 319)

the original content of this for block:
$params['data'][$model][$field][$k][$key] = $v;

its now inside the else:
foreach ($value as $k => $v) {
// this if does the magic!
if(is_array($v)) {
$vk = key($v);
$vv = $v[$vk];
$params['data'][$model][$field][$k][$vk][$key] = $vv;
} else {
$params['data'][$model][$field][$k][$key] = $v;
}
}

And now, it's working fine!

What do you guys think??


On 24 fev, 18:31, Lucca Mordente <luccamorde...@gmail.com> wrote:
> Hello!
>
> I'm having problems saving multiple files through related model.
>
> I have the following structure:
>   Document hasMany Item
>   Item belongsTo Document
>   Item belongsTo File
>
> File is a generic model I created to ease attaching a file to a model.
>
> My Document form is like following:
>   ...
>   $k=0;
>   echo $form->input('Item.'.$k.'.title');
>   echo $form->input('Item.'.$k.'.File.filename',
> array('type'=>'file'));
>
> After submiting the form, I immediatelly caught debug($this->data),
> that outputs:
>   ...
>     [Item] => Array
>         (
>             [0] => Array
>                 (
>                     [title] =>
>                     [File] => Array
>                         (
>                             [name] => Array
>                                 (
>                                     [filename] =>
>                                 )
>                             [type] => Array
>                                 (
>                                     [filename] =>
>                                 )
>                             [tmp_name] => Array
>                                 (
>                                     [filename] =>
>                                 )
>                             [error] => Array
>                                 (
>                                     [filename] => 4
>                                 )
>                             [size] => Array
>                                 (
>                                     [filename] => 0
>                                 )
>                         )
>                 )
>         )
> every File field receives a strange array.
>
> for the following:
>   Document HASONE Item
>   Item belongsTo Document
>   Item belongsTo File
> and:
>   echo $form->input('Item.title');
>   echo $form->input('Item.File.filename', array('type'=>'file'));
> everything goes like expected.
>   ...
>     [Item] => Array
>         (
>              [title] =>
>              [File] => Array
>                 (
>                     [name] =>
>                     [type] =>
>                     [tmp_name] =>
>                     [error] => 4
>                     [size] => 0
>                 )
>         )
>
> Suggestions?
> Thank you!

Check out the new CakePHP Questions site http://cakeqs.org and help others with their CakePHP related questions.

You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

No comments: