gpt4 book ai didi

php - 如何从 Silex 中的自定义文件/类连接到数据库

转载 作者:行者123 更新时间:2023-12-03 23:05:48 24 4
gpt4 key购买 nike

我是第一次尝试这个迷你框架,这是我第一次使用 justa 框架:)
我像这样将 Doctrine 服务添加到我的 index.php 文件中:

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_sqlite',
'path' => __DIR__.'/../include/database.sqlite',
),
));

然后我创建了一个新文件,其中包含一个类,其中包含一个返回数组的静态方法,例如。

<?php

namespace MyNameSpace;


class myClass{

static function getStuff(){


return array(1 => array('foo'=> 'bar',
'bar' => 'foo',
)
);

}

}

如您所见,它是硬编码的,所以我决定使用数据库(sqlite 就足够了),但我不知道如何访问文件中的 $app 变量。

另一方面,我能在网上找到的所有教程都令人困惑,并且引用了旧的 Silex 版本和现在已弃用的 .phar 文件,并且我发现的所有示例的目录结构都与我的不同(取自来自胖 Silex zip 文件)

我项目的目录结构是这样的:

├── composer.json
├── composer.lock
├── src
│ └── MyNameSpace
│ └── myClass.php
├── vendor
│ └── composer
│ └── doctrine
│ └── silex
│ └── ...
│ └── **autoload.php**
└── web
└── css
└── img
└── js
└── views
└── .htaccess
└── index.php

最佳答案

您需要知道的第一件事是访问 $app 是一种不好的做法。如果可能,您应该进行 DI。如果您真的想这样做,请检查下面的代码。

index.php(通常是 bootstrap.php)中声明一个新服务:

$app['my_class'] = $app->share(function() use ($app) {
// Retrieve the db instance and create an instance of myClass
return new \MyNameSpace\myClass($app['db']);
});

myClass 上添加一个构造函数:

namespace MyNameSpace;

class myClass
{
/**
* The connection
*
* @var \Doctrine\DBAL\Connection
*/
private $db;

/**
* Constructor
*
* @param $db \Doctrine\DBAL\Connection
*/
public function __construct($db)
{
$this->db = $db;
}

// ...
}

然后您可以像这样检索一个完全初始化的 myClass 实例:

$myClass = $app['my_class'];

关于php - 如何从 Silex 中的自定义文件/类连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345773/

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