cakephp - почему некоторые изменения НЕ происходят, пока я не переключу отладку на 3?

Согласно вашему комментарию, вам нужно использовать ServiceLocator для получения экземпляра вашего ConfigurationRepository, потому что экземпляр конвертера не создан Unity, а движком Silverlight / XAML.

Таким образом, ваша собственность, украшенная атрибутом DependencyAttribute, не будет введена.

c #

public class SomeValueToBrushConverter : IValueConverter
{
    public SomeValueToBrushConverter(){
      ConfigurationRepository = ServiceLocator.Current.GetInstance<ConfigurationRepository>();
    }

    private ConfigurationRepository ConfigurationRepository { get; set; }
}

В вашем методе RegisterTypes вам необходимо настроить ServiceLocator:

_container = new UnityContainer();
UnityServiceLocator locator = new UnityServiceLocator(_container);
ServiceLocator.SetLocatorProvider(() => locator);
13
задан Owen 24 June 2010 в 16:05
поделиться

3 ответа

CakePHP имеет кэш, расположенный в / app / tmp / cache . Структура каталогов выглядит следующим образом:

# /app/tmp/cache
# /app/tmp/cache/models
# /app/tmp/cache/persistent
# /app/tmp/cache/views

Основная проблема, с которой обычно сталкиваются, связана с кешем модели. Когда отладка выключена (например, в производственной среде) и вы вызываете CakePHP для отправки, он анализирует схему всех таблиц вашей базы данных и сохраняет их в плоских файлах в папке models выше. Если вы не удалите файлы в этой папке, CakePHP начнет говорить, что модели / таблицы / поля не существуют, хотя они явно присутствуют в вашей базе данных.

Если вы включите кэширование представлений в своем приложении, когда представления визуализируются в первый раз, CakePHP будет компилировать плоские файлы в папку views , чтобы предотвратить повторное отображение этих представлений при следующем запросе.

Во время процесса начальной загрузки CakePHP он должен определить структуру каталогов, которую вы используете в своей установке, прежде чем он сможет получить доступ к важным файлам (например, database.php ). Таким образом, CakePHP будет генерировать файлы кеша в постоянном каталоге с абсолютными путями к каждому важному каталогу и файлу, любым плагинам, которые вы используете, и даже любыми локализациями, которые вы создали, чтобы он мог быстро переводить ваше приложение. между языками без повторного анализа файлов .pot .

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

Причина, по которой изменение отладки на 3 работает для вас, заключается в том, что при включении режима отладки (при любом значении больше нуля) кеш очищается и регенерируется при каждом запросе, но - пока это работает - автоматизировать его непросто.

Есть несколько способов сделать это программно, включая команды оболочки , плагины CakePHP , конфигурации Capistrano , файлы Ant - но можно также просто сделайте это вручную.

30
ответ дан 1 December 2019 в 18:49
поделиться

Это определенно кэширование. На стороне сервера, если у вас включено кэширование, не удивляйтесь, если кэширование происходит. Вы можете отключить его в core.php, или, что более вероятно, очистить кэш Cache::clear() при обновлении приложения. На стороне клиента вы можете настроить свой браузер, чтобы полностью отключить кэширование.

2
ответ дан 1 December 2019 в 18:49
поделиться

Я думаю, что это проблема на стороне клиента. Установлен ли у вас аддон Web Developer для Firefox Mozilla? Если да, то вы можете легко отключить кэш на стороне клиента, просто чтобы проверить.

Он снова работает, если вы измените уровень отладки, потому что тогда урлы и данные cookie, вероятно, немного отличаются, что приводит к свежей перезагрузке с сервера. Если он все еще не работает, значит, дело в кэше на стороне сервера...

ПРИМЕЧАНИЕ: Помимо этого вы можете делать всевозможные полезные вещи для веб-разработки с помощью этого аддона, например, изменять css на лету или визуализировать стили как наложение на страницу.

1
ответ дан 1 December 2019 в 18:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: