猿问

CakePHP:将DisplayField 设置为虚拟字段

我正在关注 CakePHP 3.7 的文档,以便在选择输入控件中显示虚拟字段。


DeliveryNotesTable.php


public function initialize(array $config)

{

    parent::initialize($config);


    $this->setTable('delivery_notes');

    $this->setDisplayField('reference');

    $this->setPrimaryKey('id');


    $this->belongsTo('Customers', [

        'foreignKey' => 'customer_id'

    ]);

    $this->belongsTo('ShipmentReasons', [

        'foreignKey' => 'shipment_reason_id'

    ]);

    $this->belongsTo('ShipmentMethods', [

        'foreignKey' => 'shipment_method_id'

    ]);

    $this->hasMany('ItemsDeliveryNotes', [

        'foreignKey' => 'delivery_note_id'

    ]);

    $this->hasMany('ItemOrders', [

        'foreignKey' => 'delivery_note_id'

    ]);

}


protected function _getReference()

{

    return $this->deliveryNoteNumber . ' ' . $this->deliveryNoteDate;

}

我在 DeliveryNote.php 中公开虚拟字段:


class DeliveryNote extends Entity

{

    protected $_accessible = [

        'customer_id' => true,

        'shipment_reason_id' => true,

        'deliveryNoteNumber' => true,

        'deliveryNoteDate' => true,

        'shipment_method_id' => true,

        'number_of_packages' => true,

        'weight' => true,

        'customer' => true,

        'shipment_reason' => true,

        'shipment_method' => true,

        'items_delivery_notes' => true

    ];


    protected $_virtual = [

        'reference'

    ];

}

在我的控制器中,我加载相关数据:


public function add($id)

{

    $itemOrder = $this->ItemOrders->newEntity();

    $itemOrder['order_id'] = $id;

    if ($this->request->is('post')) {

        $itemOrder = $this->ItemOrders->patchEntity($itemOrder, $this->request->getData());

        if ($this->ItemOrders->save($itemOrder)) {

            $this->Flash->success(__('The {0} has been saved.', 'Item Order'));


            return $this->redirect(['controller' => 'orders', 'action' => 'index']);

        }

最后,在模板中我创建了选择控件:


<?= $this->Form->control('delivery_note_id', ['options' => $deliveryNotes, 'empty' => true]); ?>

但它是空的,没有显示任何项目。相反,如果我设置:


$this->setDisplayField('id');

或任何其他字段,选择控件已正确填充。我想念这个虚拟领域的创建过程吗?


ITMISS
浏览 149回答 1
1回答
随时随地看视频慕课网APP
我要回答