0

Мы используем SocialEngine, созданный с использованием ZendFramework. Это не вопрос о SocialEngine, хотя это касается. Это не вопрос о ZendFramework; Я полагаю, что уроки здесь широко применимы к большинству инфраструктур PhP MVC.Несуществующие свойства класса модели, без ошибок и ZendFramework

У нас есть проблема, при которой, по-видимому, в условиях высокой нагрузки некоторые части веб-сайта перестают отображаться. Например, содержимое всего виджета просто не загружается без видимых ошибок. Отсутствие ошибок для диагностики проблемы сводит меня с ума.

Это вовсе не вопрос загрузки или оптимизации.

я могу воспроизвести подобную проблему путем вызова nonexistant класса свойства из ZendFramework вида, модели или контроллера, например:

<?php echo $this->article->fubar; ?> 

В этот момент виджета она является частью будет не отображаться без какого-либо очевидного ошибка. Это проблематично, когда сам виджет является главной частью отображения страницы.

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

<?php $this->article->getCategory()->getTitle(); ?> 

... теоретически может вызывать подобное поведение, если метод getCategory() возвращает значение null.

Кроме того, я считаю, что недостаток сообщений об ошибках вызван свойствами «магии» в модели данных ZendFramework, что позволяет использовать динамические свойства класса, так что если в модели данных есть поле «blablabla», $ this-> article-> blablabla заполняется содержимым этого поля. Однако, если свойство, к которому нужно получить доступ, не является полем базы данных, это волшебное поведение не очень помогает, особенно если оно отключает нормальную отчетность об ошибках. Это также объясняет, почему $ this-> article-> fubar(); что виджет не загружается таким же образом.

Как я могу получить точные ошибки из ZendFramework, столкнувшись с этим поведением?

+0

Когда вы говорите ошибки, вы имеете в виду, что на странице ничего не отображается, или ни один из журналов ошибок? Можете ли вы повторить проблему в разработке или только на своем производственном сервере? –

+0

Ничего, что я могу найти либо в журнале ошибок, либо на экране. Я предполагаю, что есть функция, которая перенаправляет их в журнал ошибок, а затем для ... причин ... фактически не появляется. Проблема возникает как на производственных, так и на dev-серверах одновременно, а затем исчезает и на обоих, и поэтому я думаю, что в конечном итоге она связана с нагрузкой и, возможно, ограничивает скорость внешней службой. Независимо: без ошибок нет подтверждения. –

ответ

0

Вы пытались поймать ошибку, указав ниже код в файле контроллера контроллера или контроллера виджета?

error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 

Это может быть возможно, что некоторые из вашей статьи не связаны с какой-либо категории или связанные с ними категория была удалена из категории таблицы, так что $ this-> статьи() -> getCategory() приходит нуль. Этого не должно быть, если поле категории обязательное для статьи и категории существует в таблице категорий. Вы можете избежать ошибки, поставив для этого кода проверку! Empty()/instanceof.

+0

Да, это было первое, что я пробовал –