Хорошо, это была глупая ошибка. Я не имел ничего общего с разрешениями или чем-то еще, я думал, что это может быть. Это была простая синтаксическая ошибка в файле, который, я даже не думал, загружался.
Напоминает мне цитату из первого учителя информатики, который у меня когда-либо был:
"Если вы уверены, что весь ваш код верен, а программа не работает, значит, вы уверены, что это неправильно."
Извините за погоню за гусями.
Исходное сообщение:
У меня есть ошибка в моем PHP-коде, которая терроризирует меня уже несколько дней.
Я пытаюсь привязать новый модуль к существующему сайту Magento (v1.4), хотя я очень плохо знаком с фреймворком Magento. Я думаю, что я довольно близок к тому, чтобы "Hello, World" для блока, который я хочу отобразить в бэкэнде, но я получаю ошибку 500 при выборе пункта меню.
Мне удалось отследить его (используя echo stmts) до строки в файле Layout.php (app \ code \ core \ Mage \ Core \ Model \ Layout.php, строка 472ish):
if (class_exists($block, false) || mageFindClassFile($block)) {
$temp = $block;
echo "<p>before constructor: $temp</p>";
$block = new $block($attributes);
echo "<p>after constructor: $temp</p>";
}
Для моего блока это дает только «перед конструктором ...», так что я знаю, что это то, что терпит неудачу. Немного больше отладки показывает, что класс в $ block (новый блок, который я пытаюсь показать) не существует. Я ожидал, что функция __autoload позаботится об этом, но ни один из моих выводов в __autoload не отображается.
В качестве последнего шага я попытался включить оператор Mage.php в абсолютное местоположение класса блока, но до и после эхо-кода было похоже, что этот оператор включения становится прерывистой линией.
У меня возникает соблазн задуматься о «разрешениях», но я не очень разбираюсь в управлении сервером со всем этим, и у меня ограниченный доступ к тестовому серверу (тестовый сервер принадлежит клиенту).
Чтобы предвидеть вопрос: в лог-файле PHP нет сообщений об ошибках. На самом деле я не уверен, что этот сайт сообщает об ошибках в файл журнала (я ничего не видел с этого сайта), хотя клиент уверен, что все включено.
IIS 7. Интегрированный режим, я почти уверен. Кто-нибудь знает, что может быть причиной этого?
На вопросы Джо:
Имя блока FiveTalent_BikeCompat_Adminhtml_Block_Bikes .
Класс находится в файле [magento_root] \ app \ code \ local \ FiveTalent \ BikeCompat \ Adminhtml \ Block \ Bikes.php .
Функция mageFindClassFile подтверждает, что находит файл для класса.
Я почти уверен, что правильно использую методы загрузки Magento.
По общему признанию шаблон пути немного отличается от вашего примера, но я думаю, что это потому, что я пытаюсь создать блок Adminhtml.
Это действие на выполняемом контроллере:
public function indexAction() {
$this->loadLayout();
$block = $this->getLayout()->createBlock('adminhtml/bikes', 'bikecompat');
$this->_addContent($block);
$this->renderLayout();
}
Снова я возвращаюсь к вопросу о том, имеет ли веб-сервер (в данном случае IIS) права на чтение файла.
Я посмотрю, не смогу ли я достать кого-нибудь с доступом к серверу, чтобы проверить это.