#zend-framework
#zend-framework
Вопрос:
Для моего приложения zend мне нужно прочитать из базы данных некоторые базовые данные конфигурации, которые должны быть доступны везде. Я хотел бы прочитать их и сохранить в сеансе, чтобы мне не приходилось делать это для каждого запроса. Каков наилучший способ, которым я могу это сделать?
А также я хотел бы также получить данные из «Модели», и мне было бы очень, очень непросто читать из сеанса внутри модели.
Ответ №1:
Вы уверены, что хотите хранить такие важные вещи в сеансе? Вы также можете загрузить данные из базы данных и сохранить их в файле / Zend-Config-Object, который существует в течение указанного времени и обновляется позже.
Другой возможностью является Zend_Registry. Однако для этого необходимо извлекать данные при каждом запросе.
Почему вы не хотите извлекать данные при каждом запросе из базы данных? Вы могли бы легко использовать плагин-контроллер, который выполнит эту работу за вас. Вы пишете код один раз, и вам никогда не придется что-то с этим делать.
// This would be an example plugin-class...
class My_Config_Loader extends Zend_Controller_Plugin_Abstract
{
public function preDispatch($request)
{
// Fetch data here... and save it into $data
Zend_Registry::set('config', $data);
}
}
// In your bootstrap...
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new My_Config_Loader());
// Anywhere in your application
$config = Zend_Registry::get('config');
Комментарии:
1. @faileN…it данные не так уж важны … в основном это тема, ключ api Google, URL домена, почтовый идентификатор администратора — все для просмотра, поэтому было бы лучше сохранить их в сеансе… но иногда они мне нужны на уровне «Модели» для отправки почты или чего-то подобного…
2. на что было бы похоже получить их из сеанса и сохранить в реестре? где я должен это сделать? как и для каждого запроса, я бы проверял сеанс, если его там нет, я прочитаю его из базы данных и сохраню в сеансе и реестре … если он есть в сеансе, я просто получу его из сеанса и сохраню в реестре … звучит как взлом : (
3. Ну, это было Zend_Registry (или шаблон реестра в целом), изобретенный для: доступа к данным отовсюду в вашем приложении. Итак, если вам нужны данные в контроллере, в модели и в представлении, я думаю, было бы лучше сохранить их в реестре и извлечь оттуда. Конечно, вы могли бы сначала сохранить их в сеансе, а затем сохранить содержимое сеанса в реестре. Однако я бы сделал это только в том случае, если запрос, который извлекает данные, выполняется чрезвычайно медленно. Если нет, я бы извлекал данные при каждом запросе. Причина: Что, если пользователь заходит на вашу страницу, просматривает ее в то же время..
4. … администратор изменяет конфигурацию в базе данных? Пользователь будет вносить изменения только при запуске нового сеанса с обновленными данными. Таким образом, выборка данных при каждом запросе гарантирует, что данные всегда актуальны.
5. у вас есть смысл … теперь, где мне это сделать … я имею в виду, чтобы гарантировать, что код выполняется для каждого запроса? плагин контроллера?