【问题标题】:Heroku can't find PDOServiceProviderHeroku 找不到 PDOServiceProvider
【发布时间】:2017-09-30 18:21:36
【问题描述】:

所以我按照 heroku 提供的关于如何部署 php 应用程序的教程https://devcenter.heroku.com/articles/getting-started-with-php#introduction

一切正常,除非我开始设置数据库。起初我尝试在网上寻找不同的解决方案(即Dokku deployed Silex can't find PdoServiceProvider),但没有看到工作。

现在,我的代码如下所示:

<?php
    use Csanquer\Silex\PdoServiceProvider\Provider\PDOServiceProvider;
    //use Silex\Application;

    $dbopts = parse_url(getenv('DATABASE_URL'));
    $pdo = new PDOServiceProvider('pdo');
    //$app = new Application();
    $app->register($pdo,
        array(
            'pdo.server' => array(
                'driver'   => 'pgsql',
                'user' => $dbopts["user"],
                'password' => $dbopts["pass"],
                'host' => $dbopts["host"],
                'port' => $dbopts["port"],
                'dbname' => ltrim($dbopts["path"],'/')
            )
        )
    );
?>

我收到以下消息:

Uncaught Error: Class 'Csanquer\Silex\PdoServiceProvider\Provider\PDOServiceProvider' not found in /app/web/index.php:6

我该如何解决?

【问题讨论】:

    标签: php postgresql heroku pdo silex


    【解决方案1】:

    我希望你以前用过 composer,如果没有,请告诉我。尝试使用您的作曲家安装 Doctrine DBAL:

    composer require "doctrine/dbal:~2.5"
    

    安装 Doctrine 后,您可以使用以下代码行:

    $config = new \Doctrine\DBAL\Configuration();
    
    $connParams = array(
        'driver'   => #driver -> pdo_mysql,
        'dbname'   => #dbname,
        'host'     => #host -> localhost,
        'user'     => #user,
        'password' => #password,
        'charset'  => #charset -> utf8
    );
    $conn = \Doctrine\DBAL\DriverManager::getConnection($connParams, $config);
    

    你现在可以使用类似的东西:

    $conn->query(#SomeSQL)
    $conn->prepare(#SomeSQL)
    

    或者以你喜欢的方式:

    $app->register(new Silex\Provider\DoctrineServiceProvider(), array(
        'db.options' => array(
            'driver'   => #driver -> pdo_mysql,
            'dbname'   => #dbname,
            'host'     => #host -> localhost,
            'user'     => #user,
            'password' => #password,
            'charset'  => #charset -> utf8
        ),
    ));
    

    你现在可以使用类似的东西:

    $app['db']->query(#someSQL);
    

    有关 Doctrine DBAL 的更多信息,请参阅页面 herehere。请让我知道这是否对您有所帮助! (通过将问题标记为已完成或评论新错误)。

    【讨论】:

      【解决方案2】:

      我希望你以前用过 composer,如果没有,请告诉我。尝试使用您的作曲家安装 Doctrine DBAL:

      composer require "doctrine/dbal:~2.5"
      

      安装 Doctrine 后,您可以使用以下代码行:

      $config = new \Doctrine\DBAL\Configuration();
      
      $connParams = array(
          'driver'   => #driver -> pdo_mysql,
          'dbname'   => #dbname,
          'host'     => #host -> localhost,
          'user'     => #user,
          'password' => #password,
          'charset'  => #charset -> utf8
      );
      $conn = \Doctrine\DBAL\DriverManager::getConnection($connParams, $config);
      

      你现在可以使用类似的东西:

      $conn->query(#SomeSQL)
      $conn->prepare(#SomeSQL)
      

      或者以你喜欢的方式:

      $app->register(new Silex\Provider\DoctrineServiceProvider(), array(
          'db.options' => array(
              'driver'   => #driver -> pdo_mysql,
              'dbname'   => #dbname,
              'host'     => #host -> localhost,
              'user'     => #user,
              'password' => #password,
              'charset'  => #charset -> utf8
          ),
      ));
      

      你现在可以使用类似的东西:

      $app['db']->query(#someSQL);
      

      有关 Doctrine DBAL 的更多信息,请参阅此处或此处的页面。请让我知道这是否对您有所帮助! (通过将问题标记为已完成或评论新错误)。

      【讨论】:

      • 我已经切换了帐户。您能否将此答案标记为完整答案?我会删除旧的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2018-06-26
      • 2012-09-29
      • 2016-04-18
      • 2015-09-21
      • 1970-01-01
      相关资源
      最近更新 更多