I would simply create a component called Cart and add a read() method to 
just pull the products. Something like this:

class CartComponent extends Object {
var $components = array('Session');
 function read() {
$Product = ClassRegistry::init('Product');
$productsInCart = $this->Session->read('Cart');
$cart = array();
foreach ($productsInCart as $product) {
$cart[] = $Product->read(null, $product);
}
return $cart;
}
 function save($id) {
$productsInCart = $this->Session->read('Cart');
$productsInCart[] = $id;
return $this->Session->save('Cart', $productsInCart);
}
}

Then you access it from the controller and you're good to go. Technically 
it's not MVC since the Cart should be a model, but do you really want to 
write a datasource to pull/save to the Session just for something simple 
like this? I mean, since there will only ever be *one* cart record (from 
the eyes of the user) it doesn't seem to make sense to go to all the 
trouble. Breaking MVC patterns is okay every once in a while :) This 
component would be easily testable and separate from your controller.

On Tuesday, February 28, 2012 1:06:27 PM UTC-8, Christian wrote:
>
> Hi, 
>
> I'm currently trying to create a shopping cart solution with cake 1.3. 
> In the current design, only the product id of a chosen product will be 
> saved in the session, each time the customer lists the cart items, all 
> information needs to be read out of the database. 
> My idea was to create a seperated model (no relation to any table) 
> where all cart calculations can happen in, which can then be used in 
> several controllers. However, this would mean that this cart class 
> would need to use several other product related models (product 
> details, taxes, countrydetails, etc.), which is not easily supported 
> by cake, since it breaks the MVC model. 
> The workaround would be to implement the logic in a controller where I 
> can easily access all models, however, this breaks two other basics, 
> once the "fat model skinny controller" rule and on the other hand the 
> code is not easily reusable for other purposes. 
>
> My question is now how where to implement the cart functionality (e.g. 
> summary price, discount, taxes calculation, etc.) without breaking MVC 
> but with sticking to "fat model skinny controller" and the re- 
> usability of my code. 
>
> Thanks, 
> Christian


On Tuesday, February 28, 2012 1:06:27 PM UTC-8, Christian wrote:
>
> Hi, 
>
> I'm currently trying to create a shopping cart solution with cake 1.3. 
> In the current design, only the product id of a chosen product will be 
> saved in the session, each time the customer lists the cart items, all 
> information needs to be read out of the database. 
> My idea was to create a seperated model (no relation to any table) 
> where all cart calculations can happen in, which can then be used in 
> several controllers. However, this would mean that this cart class 
> would need to use several other product related models (product 
> details, taxes, countrydetails, etc.), which is not easily supported 
> by cake, since it breaks the MVC model. 
> The workaround would be to implement the logic in a controller where I 
> can easily access all models, however, this breaks two other basics, 
> once the "fat model skinny controller" rule and on the other hand the 
> code is not easily reusable for other purposes. 
>
> My question is now how where to implement the cart functionality (e.g. 
> summary price, discount, taxes calculation, etc.) without breaking MVC 
> but with sticking to "fat model skinny controller" and the re- 
> usability of my code. 
>
> Thanks, 
> Christian


On Tuesday, February 28, 2012 1:06:27 PM UTC-8, Christian wrote:
>
> Hi, 
>
> I'm currently trying to create a shopping cart solution with cake 1.3. 
> In the current design, only the product id of a chosen product will be 
> saved in the session, each time the customer lists the cart items, all 
> information needs to be read out of the database. 
> My idea was to create a seperated model (no relation to any table) 
> where all cart calculations can happen in, which can then be used in 
> several controllers. However, this would mean that this cart class 
> would need to use several other product related models (product 
> details, taxes, countrydetails, etc.), which is not easily supported 
> by cake, since it breaks the MVC model. 
> The workaround would be to implement the logic in a controller where I 
> can easily access all models, however, this breaks two other basics, 
> once the "fat model skinny controller" rule and on the other hand the 
> code is not easily reusable for other purposes. 
>
> My question is now how where to implement the cart functionality (e.g. 
> summary price, discount, taxes calculation, etc.) without breaking MVC 
> but with sticking to "fat model skinny controller" and the re- 
> usability of my code. 
>
> Thanks, 
> Christian

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to