loadComponent('CakeCarts.ShoppingCart', [ // This is default config. You can modify "actions" as needed to make // component work only for specified methods. 'actions' => ['add'], ]); if ($this->components()->has('Authorization')) { $this->Authorization->skipAuthorization(); } } /** * Add method * * @return \Cake\Http\Response|null|void Redirects on successful add, renders view otherwise. */ public function add() { $this->request->allowMethod(['post', 'put', 'patch']); Log::debug(print_r('$this->request->getData()', true)); Log::debug(print_r($this->request->getData(), true)); $cart = $this->viewBuilder()->getVar('cart'); $postData = $this->request->getData(); $postData['cart_id'] = $cart->id; // get product skus with variants $price = $this->request->getData('price'); $qty = $this->request->getData('qty', 1); $postData['price'] = $price; $postData['subtotal'] = isset($price) ? bcmul("$price", "$qty", 5) : null; $newCartItem = $this->CartItems->newEntity($postData, [ 'validate' => Configure::readOrFail('CakeCarts.CartItems.requirePricing') ? 'requirePricing' : 'default', ]); if ($this->CartItems->save($newCartItem)) { $this->Flash->success('Added to cart'); return $this->redirect($this->referer([ 'plugin' => 'CakeCarts', 'controller' => 'CartItems', 'action' => 'index' ])); } // Log::debug(print_r('$newCartItem->getErrors()', true)); // Log::debug(print_r($newCartItem->getErrors(), true)); dd(print_r($newCartItem->getErrors(), true)); $this->Flash->error('Failed to add to cart.'); return $this->redirect($this->referer([ 'plugin' => 'CakeCarts', 'controller' => 'CartItems', 'action' => 'index' ])); } /** * Edit method * * @param string|null $id Cart Item id. * @return \Cake\Http\Response|null|void Redirects on successful edit, renders view otherwise. * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function edit($id = null) { $this->request->allowMethod(['post', 'put', 'patch']); $cartItem = $this->CartItems->find() ->where(['CartItems.id' => $id]) ->contain(['Carts']) ->firstOrFail(); $this->ShoppingCart->checkIfIsOwnCart($cartItem->cart); if ($this->request->is(['patch', 'post', 'put'])) { $postData = $this->request->getData(); $qty = $this->request->getData('qty', 1); $price = $this->request->getData('price', null); $subtotal = isset($price) ? bcmul("$qty", "$price", 5) : null; $postData['subtotal'] = $subtotal; $cartItem = $this->CartItems->patchEntity($cartItem, $postData, [ 'validate' => Configure::readOrFail('CakeCarts.CartItems.requirePricing') ? 'requiresPricing' : 'default', ]); if ($this->CartItems->save($cartItem)) { $this->Flash->success(__('The cart item has been saved.')); return $this->redirect($this->referer([ 'plugin' => 'CakeCarts', 'controller' => 'CartItems', 'action' => 'index' ])); } Log::debug(print_r('$cartItem->getErrors()', true)); Log::debug(print_r($cartItem->getErrors(), true)); $this->Flash->error(__('The cart item could not be saved. Please, try again.')); } return $this->redirect($this->referer([ 'plugin' => 'CakeCarts', 'controller' => 'CartItems', 'action' => 'index' ])); } /** * Delete method * * @param string|null $id Cart Item id. * @return \Cake\Http\Response|null Redirects to index. * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function delete($id = null) { $this->request->allowMethod(['post', 'delete']); $identity = $this->getRequest()->getAttribute('identity'); // $cart = $this->viewBuilder()->getVar('cart'); $cartItem = $this->CartItems->find() ->where(['CartItems.id' => $id]) ->contain(['Carts']) ->firstOrFail(); $this->ShoppingCart->checkIfIsOwnCart($cartItem->cart); unset($cartItem->cart); if ($this->CartItems->delete($cartItem)) { $this->Flash->success(__('The cart item has been deleted.')); } else { $this->Flash->error(__('The cart item could not be deleted. Please, try again.')); } return $this->redirect($this->referer([ 'plugin' => 'CakeCarts', 'controller' => 'CartItems', 'action' => 'index' ])); } }