所以,我试图绕过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;
}
}
答案 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;
}