Cakephp主/细节添加

时间:2012-09-24 09:41:56

标签: javascript cakephp

我有两张桌子,有很多关系, 在master add.ctp中,允许用户上传0~5个文件(文件路径信息存放在详细信息表中)

我想在master / add.ctp

中动态显示附件(详细信息)表单

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

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

然后forloop

{
        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 并获得相同的错误:变量未定义

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

  

'对于每个字段,使用最后带有[]的默认名称(将生成   它像数组一样堆栈)例子:data [] [book_id]后有字段   已提交'

我应该在哪里放置[]?

2 个答案:

答案 0 :(得分:0)

我认为你应该使用Ajax。

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

您可以直接在控制器上使用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有疑问,你应该在网上搜索,你会在那里找到很多教程。

答案 1 :(得分:0)

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

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

是的,AJAX可以做很多事情,对我而言,很难理解一天中的逻辑......

无论如何,再次感谢。