Php 在Slim框架中定义MySQL连接?

Php 在Slim框架中定义MySQL连接?,php,slim,Php,Slim,我听到了关于Slim框架的一些很棒的东西,而且看起来很简单。除了教程中没有提到MySQL信息的存放位置 我看到类似于$dbCon=getConnection() 但是我在哪里定义用户名/pw/db/host等呢?您可以在文件中定义一个函数(例如index.php) 我在MVC模式中取得了巨大成功,您将凭证存储在config.php文件中,该文件将加载到模型的每个实例上:最好将这些凭证保存在本地配置文件中。我在web根目录外添加了一个configs文件夹,并向其中添加了一个local.php配置文

我听到了关于Slim框架的一些很棒的东西,而且看起来很简单。除了教程中没有提到MySQL信息的存放位置

我看到类似于
$dbCon=getConnection()


但是我在哪里定义用户名/pw/db/host等呢?

您可以在文件中定义一个函数(例如index.php)


我在MVC模式中取得了巨大成功,您将凭证存储在
config.php
文件中,该文件将加载到模型的每个实例上:

最好将这些凭证保存在本地配置文件中。我在web根目录外添加了一个configs文件夹,并向其中添加了一个local.php配置文件

....
/configs
    local.php
/public
/vendor
....
您可以配置任何您喜欢的内容,但以下是数据库:

<?php
// configs/local.php
return array(
    'db' => ['user' => 'root', 'password' => 'root']
);

您可以在外部类中配置PDO:

 class Connection
    {
        protected $db;
        public function Connection()
        {
        $conn = NULL;
            try{
                $conn = new PDO("mysql:host=YOUR_HOST;dbname=DB_NAME;charset=utf8;collation=utf8_unicode_ci", "USER_DB", "PASS_DB");
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch(PDOException $e) {
                echo 'ERROR: ' . $e->getMessage();
            }   
            $this->db = $conn;
        }

        public function getConnection()
        {
            return $this->db;
        }
    }
然后在Slim(Php面向对象)中:


首先让我们打开src/settings.php文件,并配置设置数组的数据库连接详细信息,如下所示

<?php
return [
  'settings' => [
      'displayErrorDetails' => true, // set to false in production

      // Renderer settings
      ....
      ....    

      // Monolog settings
      ....
      ....

      // Database connection settings
      "db" => [
          "host" => "localhost",
          "dbname" => "slim3",
          "user" => "root",
          "pass" => "xxxxx"
      ],
   ],
];

via:

据我所知,slim没有数据库连接。slim没有数据库访问权限,但您可以使用任何orm。我个人不喜欢这种方法,因为您最终会在源代码中获得凭据。我会将凭据移动到web根目录之外的本地配置文件中,而您的源代码管理会忽略该文件。我同意@ForrestLyman的观点,数据库凭据与此无关。这种方法不是最好的,我想应该有一个.env文件
 class Connection
    {
        protected $db;
        public function Connection()
        {
        $conn = NULL;
            try{
                $conn = new PDO("mysql:host=YOUR_HOST;dbname=DB_NAME;charset=utf8;collation=utf8_unicode_ci", "USER_DB", "PASS_DB");
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch(PDOException $e) {
                echo 'ERROR: ' . $e->getMessage();
            }   
            $this->db = $conn;
        }

        public function getConnection()
        {
            return $this->db;
        }
    }
  <?php

   class Proxy
   {
    require_once 'Connection.php';

    // init Slim

    private $conn = NULL;

    // Api Rest code...


    # getConnection
    public function getConnection(){
        if(is_null($this->conn)){
            $this->conn = new Connection();
        }
        return $this->conn->getConnection();
    }
  <?php

    require_once 'Connection.php';

    // init Slim

    $conn = NULL;

    // Api Rest code...


    # getConnection
    function getConnection(){
        global $conn;
        if(is_null($conn)){
            $conn = new Connection();
        }
        return $conn->getConnection();
    }
<?php
return [
  'settings' => [
      'displayErrorDetails' => true, // set to false in production

      // Renderer settings
      ....
      ....    

      // Monolog settings
      ....
      ....

      // Database connection settings
      "db" => [
          "host" => "localhost",
          "dbname" => "slim3",
          "user" => "root",
          "pass" => "xxxxx"
      ],
   ],
];
// DIC configuration
$container = $app->getContainer();

...
...
...

// PDO database library
$container['db'] = function ($c) {
    $settings = $c->get('settings')['db'];
    $pdo = new PDO("mysql:host=" . $settings['host'] . ";dbname=" . $settings['dbname'],
        $settings['user'], $settings['pass']);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    return $pdo;
};