Silex与Doctrine和PHP类

时间:2017-03-31 07:40:25

标签: php class doctrine silex

所以,我试图绕过Silex。只是学习它的工作方式,我试图在其中使用Doctrine。我可以在index.php上使用它,但我也想在我的课程中使用它。这些行用于普通根文件(index.php):

$images = $app['db']->prepare("SELECT * FROM images");
$images->execute();

$images = $images->fetchAll(\PDO::FETCH_CLASS, \AI\Models\Image::class);

这样我就能够对图像做些什么。但我不想以这种方式工作。我喜欢上课为我做这一切,所以我只是编写了一些方法,为我做了所有艰苦的工作。这样我就可以在index.php中为每个Route运行一行

问题在于我不知道如何从课堂内连接Doctrine。因为没有' $ app'在那里。我认为在课堂上启动应用程序会很奇怪。

所以,让我们说我想创建一个用户类。这个SQL会给我所有的用户:" SELECT * FROM users"。但是我如何在User类中使用Doctrine?

<?php

namespace Models;

class User {

    public function find($user){
        if($user) {
            $field = (is_numeric($user)) ? 'id' : 'username';

            $sql = "SELECT * FROM users";

            $data = // RUN QUERY $SQL 
            if($data->count()) {
                $this->_data = $data->all();
                return true;
            }
        }
        return false;
    }

}

2 个答案:

答案 0 :(得分:0)

您需要在控制器中注入这些实例。 我快速查看了文档并认为我找到了你需要的东西。

以下是文档页面的链接:http://silex.sensiolabs.org/doc/2.0/providers/service_controller.html

文档页面解释了获得想要实现的目标所需的一切。

答案 1 :(得分:0)

index.php中按照以下步骤操作。

  • 创建silex应用程序的实例:

    $app = new Silex\Application();
    $app->register(new Silex\Provider\ServiceControllerServiceProvider());
    
  • 设置数据库配置:

    $config = new \Doctrine\DBAL\Configuration();
    $connParams = array(
        'driver'   => 'driver',
        'dbname'   => 'dbname',
        'host'     => 'host',
        'user'     => 'user',
        'password' => 'pass',
        'charset'  => 'charset',
        'port'     => 'port' 
    );
    
  • 连接数据库:

    $conn = \Doctrine\DBAL\DriverManager::getConnection($connParams, $config);
    

现在,您可以通过不同的方式在整个应用中访问此数据库实例。您是否可以在其中添加实例来创建一个全局变量:

global $dbcon;
$dbcon = $conn;

或者只是将其添加到$app本身:

$app['dbcon'] = $conn;

此外,您可能希望为模型添加构造函数,如下所示:

public function __construct($db)
{
    $this->db = $db;
}