2013-05-04 5 views
0

Я пытаюсь создать структуру cakePHP, и у меня есть вопрос о состоянии объектов.CakePHP сохранить состояние объектов

Раньше я был использован для сериализации объектов и их переориентации при перезагрузке. Таким образом, объекты всегда сохраняют свое состояние, но я не уверен, что это лучшая практика.

Какова наилучшая практика отслеживания продуктов, добавленных в корзину покупок, и общее состояние модели? Я как-то сохраняю состояние объекта в сеансах? Или я сохраняю данные в сеансах и восстанавливаю модель при перезагрузке страницы?

Предлагает ли cakePHP некоторые встроенные функции, которые я должен знать о том, когда дело касается объектов и состояний?

ответ

1

Кажется уместным ответить на ваши вопросы в обратном порядке.

Имеет ли 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, на ваш взгляд, как хорошо.

+0

Великий Сэм. Спасибо за прогулку. Я попытаюсь использовать подход без учета штата. Я всегда сериализовал объекты, чтобы избежать запросов к базе данных, но я думаю, это то, что вам нужно учитывать при каждом новом проекте. –

+0

Не беспокойтесь @RonnieJespersen. Я лично нашел обратное более полезным; сначала используйте базу данных, а затем используйте кеширование на основе файлов (или данные сеанса) для оптимизации после запуска и запуска вашего приложения. Преимущество такого подхода состоит только в том, что вы загружаете вещи, которые вы можете быть уверены в использовании. Но помните, чем больше вы держите в сеансе, тем дольше может потребоваться его восстановление между запросами. Удачи! –

Смежные вопросы