2013-02-08 3 views
2

Zend Framework 2 утверждает, что имеет конструкцию «по использованию», которая позволяет вам легко использовать любой из своих модулей, не переходя в полный стек. Мне нужен хороший уровень доступа к базе данных, а из документов и рекомендаций онлайн мне нравится внешний вид Zend \ Db. Я поместил папку Zend/Db в каталог/lib, но мне не удается заставить PHP распознавать класс Zend \ Db \ Adapter \ Adapter. Я постоянно получаю фатальную ошибку, когда я пытаюсь использовать его:Как загрузить только модуль базы данных Zend Framework 2

Fatal error: Class 'Zend\Db\Adapter\Adapter' not found in /home/username/public_html/test.php on line 6

Я попытался установить ZF2_PATH в моей .htaccess: SetEnv ZF2_PATH /home/username/public_html/lib/Zend

Я попытался установить включаемые путь в моем коде: set_include_path($_SERVER['DOCUMENT_ROOT'] . '/lib' . PATH_SEPARATOR . get_include_path());

Я попытался явно загрузку и инстанцировании Зенд \ Loader:

require_once 'lib/Zend/Loader/StandardAutoloader.php'; 
$zendLoader = new Zend\Loader\StandardAutoloader(); 
$zendLoader->register(); 

Ничто из этого не имело никакого эффекта. Я пробовал явно требовать Zend/Db/Adapter/Adapter.php, и это исправляло ошибку, которую я вижу, но тогда я просто получаю ту же ошибку для одной из своих зависимостей, так что это не практическое решение.

Что я здесь делаю неправильно? Является ли ZF2 просто не предназначенным для такого модульного использования, или я что-то упускаю?

EDIT: Я получил эту работу, написав свою собственную функцию автозагрузки:

function autoloader($class) { 
    $path = explode('\\', $class); 
    foreach ($path as $p) { 
     $cp .= DIRECTORY_SEPARATOR . $p; 
    } 
    include __DIR__ . '/lib/' . $cp . '.php'; 
} 
spl_autoload_register(autoloader); 

Этот вида имеет смысл - очевидно, если я использую модуль дб без остальной части рамки, я могу Не ожидайте, что фреймворк сделает автозагрузку для меня - кроме того, что я до сих пор не понимаю, почему загрузка вручную Zend \ Loader не решила проблему. Не обрабатывает автозагрузку точки Zend \ Loader? Во всяком случае, на данный момент у меня есть работоспособное решение, но если есть лучшее решение, я бы хотел его услышать.

ответ

6

Я настоятельно рекомендую вам зарегистрироваться composer. Это действительно упрощает управление зависимостями между тонны современных PHP-библиотек, а также автозагрузкой.

Например, если вы начинали вам проецировать, и вы знали, что вы хотели, чтобы тянуть в Зенд-дб, вы могли бы сделать что-то вроде этого:

$ mkdir myproject 
$ cd myproject 
$ curl -s https://getcomposer.org/installer | php 
$ ./composer.phar require zendframework/zend-db:2.1.1 

Эта последняя линия заставит композитора к весне в действие. Он создаст каталог под названием «vendor», где он сохранит все библиотеки, которыми он управляет. Затем он проверит версию 2.1.1 zend-db и настроит поставщика/autoload.php, который вам понадобится в вашем проекте.

Затем вы можете проверить его. Создайте myproject/index.php следующим образом:

<?php 
require_once "vendor/autoload.php"; 

$adapter = new Zend\Db\Adapter\Adapter(array(
    'driver' => 'Pdo_Sqlite', 
    'database' => 'path/to/sqlite.db' 
)); 

И это просто работает.

Позже, если вы решите, что вам нужно Zend \ почта тоже просто:

$ ./composer.phar require zendframework/zend-mail:2.1.1 

и композитор установит его вместе с несколькими зависимостями, и убедитесь, что он доступен для заряжания.

Композитор не является ZF-специфическим. Для изучения существует целая экосистема кода.Packagist - хорошее место для начала.

+0

Спасибо за совет. – cfc