Итак, у меня есть файл Doctrine.php в иерархии папок, например:
\ включает\ setup.php Учение \ Common \ DBAL \ ORM \ Symfony \ Doctrine.php
Мой setup.php имеет следующее:
$rootPath = $_SERVER['DOCUMENT_ROOT']; $includePath = getcwd() . "\includes"; ini_set('include_path', '.'.PATH_SEPARATOR.$rootPath.PATH_SEPARATOR.$includePath); require_once 'includes\Doctrine\Doctrine.php';
Мой Doctrine.php:
<?php /* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * and is licensed under the LGPL. For more information, see * <http://www.doctrine-project.org>. */ require_once 'Doctrine/Common/ClassLoader.php'; $classLoader = new \Doctrine\Common\ClassLoader('Doctrine'); $classLoader->register(); $classLoader = new \Doctrine\Common\ClassLoader('Symfony', 'Doctrine'); $classLoader->register(); $configFile = getcwd() . DIRECTORY_SEPARATOR . 'cli-config.php'; $helperSet = null; if (file_exists($configFile)) { if ( ! is_readable($configFile)) { trigger_error( 'Configuration file [' . $configFile . '] does not have read permission.', E_ERROR ); } require $configFile; foreach ($GLOBALS as $helperSetCandidate) { if ($helperSetCandidate instanceof \Symfony\Component\Console\Helper\HelperSet) { $helperSet = $helperSetCandidate; break; } } } $helperSet = ($helperSet) ?: new \Symfony\Component\Console\Helper\HelperSet(); \Doctrine\ORM\Tools\Console\ConsoleRunner::run($helperSet);
Теперь, когда я включаю my setup.php со всемирной страницы привет, я получаю следующие предупреждения:
Примечание. Неопределенный индекс: argv в C: \ xampp \ htdocs \ SpaceWars \ включает \ Doctrine \ Symfony \ Component \ Console \ Input \ ArgvInput.php в строке 53 Предупреждение: array_shift () ожидает, что параметр 1 будет массивом, null указан в C: \ xampp \ htdocs \ SpaceWars \ includes \ Doctrine \ Symfony \ Component \ Console \ Input \ ArgvInput.php в строке 57
Может ли кто-нибудь объяснить мне, что я делаю неправильно? Я попробовал Googling предупреждения, но, похоже, ничего не нашел.
Файл доктрины, который у вас есть, предназначен для запуска инструментов Doctrine из командной строки. Вместо этого вам нужно что-то похожее:
use Doctrine\Common\ClassLoader, Doctrine\ORM\Configuration, Doctrine\ORM\EntityManager, Doctrine\DBAL\Types\Type, Doctrine\Common\Cache\ArrayCache, Doctrine\DBAL\Logging\EchoSqlLogger; // include the class loader directly require_once __DIR__ . '/Common/ClassLoader.php'; $doctrineClassLoader = new ClassLoader('Doctrine', __DIR__ . '/../'); $doctrineClassLoader->register(); // Set up caches $config = new Configuration; $cache = new ArrayCache; $config->setMetadataCacheImpl($cache); $config->setQueryCacheImpl($cache); // Metadata Driver $driverImpl = $config->newDefaultAnnotationDriver(array('/path/to/entities')); $config->setMetadataDriverImpl($driverImpl); // Proxy configuration $config->setProxyDir(DB_PROXY_DIR); $config->setProxyNamespace(DB_PROXY_NAMESPACE); $config->setAutoGenerateProxyClasses(DB_PROXY_GEN); // Database connection information $connectionOptions = array( 'driver' => 'pdo_mysql', 'user' => DB_USER, 'password' => DB_PASS, 'host' => DB_HOST, 'dbname' => DB_NAME, 'port' => DB_PORT ); // Create EntityManager $em = EntityManager::create($connectionOptions, $config);
$em
– это менеджер сущностей, который вы используете для сохранения и извлечения объектов. Это из документации здесь: http://www.doctrine-project.org/docs/orm/2.0/en/reference/configuration.html#obtaining-an-entitymanager
UPDATE Добавлены операторы использования в верхней части файла. Они необходимы, чтобы полное пространство имен не требовалось при использовании классов.
Ваша версия PHP, запущенная на CGI, не CLI
Задайте конфигурацию php.ini Кому {CLI}
Пример php.ini:
; Note: This directive is hardcoded to On for the CLI SAPI register_argc_argv = On
argv – системная переменная
если вы запускаете скрипт из консоли, он должен существовать