gpt4 book ai didi

codeigniter - 如何在 CodeIgniter 3 中安装 Doctrine

转载 作者:行者123 更新时间:2023-12-03 16:50:44 31 4
gpt4 key购买 nike

official guide不完整,others用于 CI2。

所以我给你一个我自己检查过的教程。

我知道所以鼓励用户 to answer their own questions .

最佳答案

安装教义

(以下指令修改自:Doctrine 2 ORM’s documentation - Installation and Configuration)

可以使用 Composer 安装教义:

  • 从您的命令行(例如 Windows:开始 > cmd)更改到应安装文件的文件夹(例如 htdocs/my_project)。
  • 使用 Composer 安装文件:

    一种。运行 C:\>composer install doctrine/orm
    或者:

    湾。在您的 composer.json 文件中定义以下要求:
    {
    "require": {
    "doctrine/orm": "*"
    }
    }

    然后调用composer install从你的命令行。

  • Composer 将安装一个文件夹 vendor有许多子文件夹和数百个 php 文件。移动这个 vendor文件夹到您的 CodeIgniter 应用程序树中。为简单起见,你可以把它放在这里:
    /application
    /config
    /controllers
    /libraries
    Doctrine.php <-- the doctrine bootstrap/wrapper file
    /third_party
    /vendor <-- the folder installed by Composer. don't touch the files or folders below it -- install all together as one happy family.
    /bin
    /composer
    /doctrine
    /symfony
    autoload.php <-- Doctrine.php opens this to load its files

    然后在你的库文件 Doctrine.php (见下文)你会:
    require_once FCPATH . 'vendor/autoload.php';  // FCPATH is a CI constant specifies the path to the front controller.

    您还可以安装 vendor 中包含的所有文件夹和文件。其他地方,比如 third_party并相应地调整您的 Doctrine.php。

    与 CodeIgniter 集成

    (以下指令修改自: Doctrine 2 ORM’s documentation - Integrating with CodeIgniter)
  • 创建您的 Doctrine 库:在您的文件夹中 system/application/libraries , 创建一个名为 Doctrine.php 的文件并将以下代码复制/粘贴到文件中。这将成为 Doctrine2 实体管理器的包装器/ Bootstrap 。

    您的 Doctrine.php 库文件应如下所示(您可以根据需要对其进行自定义):
    <?php
    /**
    * Doctrine 2.4 bootstrap
    *
    */

    use Doctrine\Common\ClassLoader,
    Doctrine\ORM\Configuration,
    Doctrine\ORM\EntityManager,
    Doctrine\Common\Cache\ArrayCache,
    Doctrine\DBAL\Logging\EchoSQLLogger;


    class Doctrine {

    public $em = null;

    public function __construct()
    {
    // load database configuration from CodeIgniter
    require_once APPPATH.'config/database.php';

    // load Doctrine
    require_once FCPATH . 'vendor/autoload.php';

    // or, if you installed another way, you could:
    // require_once APPPATH.'third_party/Doctrine/Common/ClassLoader.php';

    // load the Doctrine classes
    $doctrineClassLoader = new ClassLoader('Doctrine', APPPATH.'libraries');
    // or, if installed in third_party:
    // $doctrineClassLoader = new ClassLoader('Doctrine', APPPATH.'third_party');
    $doctrineClassLoader->register();
    // load the entities
    $entityClassLoader = new ClassLoader('Entities', APPPATH.'models');
    $entityClassLoader->register();
    // load the proxy entities
    $proxiesClassLoader = new ClassLoader('Proxies', APPPATH.'models/proxies');
    $proxiesClassLoader->register();
    // load Symfony2 classes
    // this is necessary for YAML mapping files and for Command Line Interface (cli-doctrine.php)
    $symfonyClassLoader = new ClassLoader('Symfony', APPPATH.'third_party/Doctrine');
    $symfonyClassLoader->register();

    // Set up the configuration
    $config = new Configuration;

    // Set up caches
    if(ENVIRONMENT == 'development'): // set environment in index.php
    // set up simple array caching for development mode
    $cache = new \Doctrine\Common\Cache\ArrayCache;
    else:
    // set up caching with APC for production mode
    $cache = new \Doctrine\Common\Cache\ApcCache;
    endif;
    $config->setMetadataCacheImpl($cache);
    $config->setQueryCacheImpl($cache);

    // set up annotation driver
    $driver = new \Doctrine\ORM\Mapping\Driver\PHPDriver(APPPATH.'models/Mappings');
    $config->setMetadataDriverImpl($driver);

    // Proxy configuration
    $config->setProxyDir(APPPATH.'/models/Proxies');
    $config->setProxyNamespace('Proxies');

    // Set up logger (recommended to remove for production)
    $logger = new EchoSQLLogger;
    $config->setSQLLogger($logger);

    $config->setAutoGenerateProxyClasses( TRUE ); // only for development

    // Database connection information
    $connectionOptions = array(
    'driver' => 'pdo_mysql',
    'user' => $db['default']['username'],
    'password' => $db['default']['password'],
    'host' => $db['default']['hostname'],
    'dbname' => $db['default']['database']
    );

    // Create EntityManager, and store it for use in our CodeIgniter controllers
    $this->em = EntityManager::create($connectionOptions, $config);
    }
    }
  • 加载教义库:通过将 Doctrine 库添加到您的 application/config/autoload.php 中的数组来自动加载您的 Doctrine 库。文件:

    '$autoload['libraries'] = array('doctrine');`

  • 或使用以下方法将其手动加载到您的 Controller 中,就像任何其他库一样:
    $this->load->library('doctrine');
    如果你在 applications/third_party 中安装了 Doctrine.php ,你会使用:
    $autoload[‘libraries’] = array('third_party/doctrine');
    或者
    $this->load->library('third_party/doctrine');
    中提供了一个示例 Controller 。下一步是什么 .

    设置命令行工具

    Doctrine 附带了许多在开发过程中非常有用的命令行工具。

    检查 Doctrine.php 文件中是否存在这些行,以加载 Symfony 类以使用命令行工具(以及 YAML 映射文件):
    $symfonyClassLoader = new ClassLoader('Symfony', APPPATH.'third_party/Doctrine');
    $symfonyClassLoader->register();

    您需要通过在应用程序目录中创建一个包含以下内容的 cli-doctrine.php 文件来将您的应用程序 EntityManager 注册到控制台工具以使用任务:
     <?php

    /**
    * Doctrine CLI bootstrap for CodeIgniter
    *
    */

    define('APPPATH', dirname(__FILE__) . '/');
    define('BASEPATH', APPPATH . '/../system/');
    define('ENVIRONMENT', 'development');

    require APPPATH.'libraries/Doctrine.php';

    $doctrine = new Doctrine;
    $em = $doctrine->em;

    $helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
    'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
    ));

    \Doctrine\ORM\Tools\Console\ConsoleRunner::run($helperSet);

    ?>

    现在通过 PHP 命令行运行这个脚本,应该会看到一个可用的命令列表。
    php cli-doctrine.php

    从数据库生成映射类:
    php cli-doctrine.php orm:convert-mapping --from-database annotation models/Entities

    如果您收到此错误:
    fatal error :调用未定义函数 Doctrine\Common\Cache\apc_fetch()
    为 PHP 安装 APC 扩展:
    sudo apt-get install php-apc
    sudo /etc/init.d/apache2 restart

    对于 生产方式 :
    Doctrine 建议更改 Doctrine.php 中的以下设置:
    - 使用真正的缓存系统,如 APC
    - 禁用 EchoSqlLogger - 关闭 autoGenerateProxyClasses
    下一步是什么

    要在 CI 中使用 Doctrine,请从 Controller 中调用它,例如:

    应用程序/ Controller /my_controller.php:
    function doctrine_orm()
    {
    $this->load->library('Doctrine');
    $em = $this->doctrine->em;

    // do Doctrine stuff
    $productRepository = $em->getRepository('Product');
    $products = $productRepository->findAll();
    foreach ($products as $product):
    echo sprintf("-%s\n", $product->getName());
    endforeach;
    }

    然而,在做任何 Doctrine 的事情之前,你必须首先将你的数据库表映射到 Doctrine “实体”。在这里了解如何: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/getting-started.html

    关于codeigniter - 如何在 CodeIgniter 3 中安装 Doctrine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209930/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com