Кажется уместным ответить на ваши вопросы в обратном порядке.
Имеет ли cakePHP некоторые встроенные функции, которые я должен знать о , когда дело касается объектов и состояний?
Да !, CakePHP имеет built in wrapper для PHP $_SESSION
объекта, так что вы можете быстро добавлять и удалять объекты из него с помощью прилагаемых удобных методов.
Какова наилучшая практика для отслеживания продуктов, добавленных в shoopingcart и общее состояние модели ? Сохранять объект Состояние как-то в сеансе? Или я сохраняю данные в сеансе и восстанавливаю модель, если страница перезагружается?
Я лично никогда не обнаружил необходимости в том, Поскольку записи из базы данных, хранящейся в ассоциативных массивах, нет проблем с их сериализацией.
Лучший способ подумать о структуре - это единственное, что может иметь состояние перезагрузки страниц - это ваша база данных ... и сеанс, если вы решите использовать его.
В вашем случае я бы, вероятно, сделать следующее (в контроллере):
public function addProductToCart($productId){
// find the product in the database (model)
$product => $this->Product->findById($productId);
// get the existing state of the basket
$basket = $this->Session->read('basket');
// just in case the basket hasn't been initialised
if($basket == null){
$basket = array();
}
// append the basket to the database
$basket[] = $product;
// write the basket to the session
$this->Session->write('basket', $basket);
}
Пожалуйста, прочитайте documentation, как это будет показано, как использовать объект Session, на ваш взгляд, как хорошо.
Великий Сэм. Спасибо за прогулку. Я попытаюсь использовать подход без учета штата. Я всегда сериализовал объекты, чтобы избежать запросов к базе данных, но я думаю, это то, что вам нужно учитывать при каждом новом проекте. –
Не беспокойтесь @RonnieJespersen. Я лично нашел обратное более полезным; сначала используйте базу данных, а затем используйте кеширование на основе файлов (или данные сеанса) для оптимизации после запуска и запуска вашего приложения. Преимущество такого подхода состоит только в том, что вы загружаете вещи, которые вы можете быть уверены в использовании. Но помните, чем больше вы держите в сеансе, тем дольше может потребоваться его восстановление между запросами. Удачи! –