Tricky CakePHP与FormHelper的关系

时间:2014-12-17 21:39:34

标签: php cakephp

在当前的问题集上,我目前正在使用3个独立的模型:

  • 票务
  • TicketResponse
  • TicketStatus

我在Tickets'view.ctp文件中工作。在视图中,我创建了一个表单,以允许当前查看的Ticket拥有的TicketResponses。所有这一切都已经奏效。

(例如:... / tickets / view / 1 - >任何/所有故障单响应都会自动将ticket_id设置为1)

我现在正在尝试为被指定为票务受让人的用户提供一种在回复时关闭票证的方法(因此在关闭票证时强制理由或答案)。对是否显示此控件的受让人的检查已经起作用,但由于我很难获得用数据库中的适当数据填充的选择框(以选择可用的票证状态),因此注释掉了。 目前,选择框完全为空。

问题: 由于表单(代码view页面)上的回复主要仅用于创建新的TicketResponses,因此我将表单创建设置为TicketResponse模型和add操作。但是TicketStatusTicket有关,而与TicketResponse无关。我不确定如何构建表单以允许TicketStatus填充数据。

型号: 票证属于TicketStatus 门票有许多TicketResponse

TicketResponse belongsTo Ticket

TicketStatus hasMany Ticket

我正在尝试的当前代码(并且正在呈现没有值的选择框)如下:

<?php
    echo $this->Form->create('TicketResponse', array('type' => 'file', 'class' => 'form', 'controller' => 'TicketResponse', 'action' => 'add'));
    echo $this->Form->input('ticket_id', array('default' => $ticket['Ticket']['id'], 'readonly' => 'readonly', 'type'=>'hidden'));
    echo $this->Form->input('content', array(
        'label' => 'Description',
        'placeholder'=>'Describe the issue in full. Paste any screenshots in to this field, or attach them if saved to a file.',
        'required' => 'required'
    ));

    // THIS IS THE PROBLEM LINE HERE
    echo $this->Form->input('ticket_status_id');
    // THIS IS THE PROBLEM LINE HERE

    echo $this->Form->end('Submit');
?>

如果有人有任何想法,我很乐意听到他们的声音!

截至目前,我正计划手动将票据控制器中的数据(所有可用票证状态)发送到视图,并根据当前票证ID数据返回的内容设置当前状态。然后,我将关注数据,并使用TicketResponse添加操作中的saveAll或saveAssociated将其保存回Ticket。

正如评论中所要求的,这是我当前的控制器代码(对于故障单视图)。请注意,有更多的关联/模型比为问题的子集定义的更多,但它们不应该对我在此处识别的基础问题造成任何问题。最近添加了find('list')以尝试手动解决CakePHP通常自动执行的操作(我试图让它在这里做):     助手[] ='时间';

        $this->Ticket->id = $id;
        if (!$this->Ticket->exists()) {
            throw new NotFoundException(__('Invalid ticket'));
        }

        // Set proper associations as req'd for the view
        $this->Ticket->recursive = -1;

        // Set the user's name as a proper concatenation for easier printing
        $this->Ticket->User->virtualFields['name'] = 'CONCAT(User.firstName, " ", User.lastName)';

        $this->set('ticket', $this->Ticket->find('first', array(
            'contain' => array(
                'Group.name',
                'User.name',
                'TicketStatus',
                'TicketPriority',
                'TicketResponse' => array(
                    'TicketAttachment' => array(
                        'fields' => array(
                            'id',
                            'ticket_response_id',
                            'location',
                            'filename',
                            'filesize'
                        )
                    ),
                    'User' => array(
                        'fields' => array(
                            'name',
                            'title'
                        )
                    )
                ),
                'TicketWatcher' => array(
                    'User.name'
                )
            ),
            'conditions' => array(
                'Ticket.id' => $id
            )
        )));

        // "FIX" for current issue where CakePHP's magic isn't working as expected
        #$this->set('ticketStatuses', $this->Ticket->TicketStatus->find('list'));

        // Update the view count by 1, if not AJAX
        if(!$this->RequestHandler->isAjax()){
            $currentViews = $this->Ticket->read('viewcount', $id);
            $currentViews = $currentViews['Ticket']['viewcount'];
            $this->Ticket->saveField('viewcount', $currentViews + 1);
        }
    }
?>

0 个答案:

没有答案