0

我有两张表,has-many关系,在master add.ctp中,允许用户上传0~5个文件(文件路径信息存放在details表中)

我想在 master/add.ctp 中动态显示附件(详细信息)表单

1,用户从下拉列表中选择要上传的文件数,

echo $this->Form->input('attachments', array( 'options' => array(1, 2, 3, 4, 5),'empty' => '(choose one)', 'onchange' => 'showNumber(this.value)'));

然后for循环

{
        echo $this->Form->input('attachment_path', array('type'=>'file','label' =>'Attachment, Maximum size: 10M'));    
} 

//但我不知道如何捕获this.value,我知道Javascript无法将值传递给php。

或用户单击“添加另一个附件”链接,然后显示详细信息表单。

如何实现此功能,任何帮助将不胜感激。

我读过这篇文章: Assign Javascript variable to PHP with AJAX and get same error: the variable is undefined

编辑: http ://cakephp.1045679.n5.nabble.com/Adding-fields-to-a-form-dynamically-a-complex-case-td3386365.html

'对于每个字段,使用末尾带有 [] 的默认名称(这将使其像数组一样堆叠)示例:提交字段后的 data[][book_id]

我应该把[]放在哪里?

4

2 回答 2

0

我使用这种方法来实现这个功能。(终于明白了:))

http://ask.cakephp.org/questions/view/foreach_loop_with_save_only_saving_last_member_of_array

是的,AJAX 可以做很多事情,对我来说,一天之内很难理解其中的逻辑..

无论如何,再次感谢。

于 2012-09-25T04:33:44.310 回答
0

我认为您应该为此使用 Ajax。

只需创建一个 ajax 调用select.change(),然后在控制器中创建一个返回必要信息的方法。

您可以直接在控制器上使用(或者在自定义视图中更好)返回一组数据echo json_encode(array('key' => 'value'))并使用 Javascript 访问它:

success: function(data) {
     alert(data.key);
}

编辑...

在您的 javascript 中使用类似...

$('select').change(function(e) {
    var select = $(this);
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "/attachments/youraction",
        data: { data: { id: select.find(":selected").val() } },
        success: function(data) {
            for (i in data) {
                var input = $('<input>', {type: "file", label: data[i].Attachment.label})
                $('form.your-form').append(input);
            }
        }
    })
});

然后在“Yourcontroller”中创建“youraction”方法:

<?php
class AttachmentsController extends AppController
{
    public function youraction()
    {
        if (!$this->RequestHandler->isAjax() || !$this->RequestHandler->isPost() || empty($this->data['id']))
        {
            $this->cakeError('404');
        }

        // Do your logic with $this->data['id'] as the select value...
        $data = $this->Attachment->find('all', array('conditions' => array('id' => $this->data['id'])));
        // ....


        // then output it...
        echo json_encode($data);

        // This should be done creating a view, for example one named "json" where you can have there the above echo json_encode($data);
        // Then..
        // $this->set(compact('data'));
        // $this->render('json');
    }
}

现在更清楚了??如果你对 ajax + cakephp 有疑问,你应该在网上搜索一下,你会找到很多教程。

于 2012-09-24T09:46:26.193 回答