Kohana 3.1 - Система не загружает почтовый модуль

У меня проблема с использованием Kohana 3.1. Я добавляю старый модуль kohana-email для банков, но получаю такую ​​ошибку:

ErrorException [Неустранимая ошибка]: класс "Электронная почта" не найден.

Файл моего приложения bootstrap.php выглядит так:

Kohana::modules(array(
    'user'      => MODPATH.'user',   // Useradmin module
    'auth'      => MODPATH.'auth',   // Basic authentication
    // 'cache'      => MODPATH.'cache',      // Caching with multiple backends
    // 'codebench'  => MODPATH.'codebench',  // Benchmarking tool
    'database'  => MODPATH.'database',   // Database access
    // 'image'      => MODPATH.'image',      // Image manipulation
    'orm'           => MODPATH.'orm',        // Object Relationship Mapping
    'kohana-email'  => MODPATH.'kohana-email',   // Kohana email module
    //'email'       => MODPATH.'email',     // Email module
    //'mailer'      => MODPATH.'mailer',        // Mailer module
    'pagination'    => MODPATH.'pagination', // Pagination module
    'testmod'   => MODPATH.'testmod',
    // 'unittest'   => MODPATH.'unittest',   // Unit testing
    // 'userguide'  => MODPATH.'userguide',  // User guide and API documentation
    ));

Как видите, я пробовал с другими модулями электронной почты (модулем почтовой программы и модулем электронной почты shadowhand) с тем же результатом.

Думая о сообщении об ошибке, я создаю модуль (с именем testmod) только с файлом init.php следующим образом:

<?php
  die('It works');
?>

затем, добавив модуль testmod в bootstrap, я получаю сообщение «Работает».

Итак, если другие модули (например, orm, auth, user) работают правильно, почему kohana-email, emailer и mailer не работают?

РЕДАКТИРОВАТЬ: я должен расширить свое объяснение:

Модуль kohana-email находится в MODPATH.'kohana-email', потому что, выполнив echo MODPATH;, я вижу правильное расположение модулей.

Мое файловое дерево модулей выглядит так:

modules (as echo MODPATH says)
  |
  +-- user     (files from user module, this module works right)
  |
  +-- auth     (files from auth module, this module works right)
  |
  +-- testmod     (init.php file from testmod, this module works right)
  |
  +-- kohana-email
  !     |
  :     +-- classes
  :     |     |
  :     |     +-- email.php    <--- The Email class is here!
  :     |
  :     +-- config
  :     |     |
  :     |     +-- email.php
  :     |
  :     +-- vendor
  ·           |
  ·           +-- swift
                    !
                    :     (files from swift)
                    ·

Да, я проверяю это с помощью Email::connect(); в том же файле bootstrap.php, после строки Kohana::modules, и здесь возникает исключение ErrorException. И, да, я проверяю это с помощью модуля теневой электронной почты, но получаю ту же ошибку.

Итак, я снова задаю вопрос:

Почему не работает модуль кохана-электронной почты (и электронной почты, и почтовой программы)? Или почему kohana не может найти класс электронной почты?


person Andrés Morales    schedule 05.04.2011    source источник


Ответы (2)


Проблема заключается в разрешениях на каталог модулей, как вы можете видеть здесь:

echo Debug::vars('What does this mean? Look at '.__FILE__.' line '.__LINE__,
/**
* PROTIP: Wrapping several variables in an array() prevents tailing
* commas "," causing exceptions.
*
* Each step below was added after the last step returned the expected result.
*/
array(
  // The path to the module
  $p = MODPATH.'kohana-email',
  // should be a directory
  is_dir($p),
  // The path to "classes/"
  $c = $p.DIRECTORY_SEPARATOR.'classes',
  // should also be directory
  is_dir($c),
  // This doesn't seem right... the last call said it wasn't a directory
  shell_exec('ls -al '.escapeshellarg($c)),
  // That failed too? Wait a second...
  shell_exec('ls -al '.escapeshellarg(MODPATH)),
  // It looks like the the module directory is not readable!
  is_readable($p),
  is_readable($c),
  // Both returned FALSE! We need to correct the permissions!
  // I ran the following commands in my console the project root:
  // $ find modules/ -type d -exec chmod 0755 {} \;
  // $ find modules/ -type f -exec chmod a+r {} \;
  // All permissions should be fixed now, all previous debugging was
  // returning the proper values, so attempt to load the class
  class_exists('Email'),
  // Hooray!
  Email::connect(),
  )
);

Спасибо Shadowhand.

person Andrés Morales    schedule 06.04.2011

У меня была аналогичная проблема. На моем локальном хосте (ОС Windows) все работает нормально, но на сервере (Ubuntu) я уже получаю эту ошибку. Я просто переименовал email.php в Email.php в modules/email/classes и все заработало.

person joni jones    schedule 05.07.2013