我第一次尝试这个迷你框架,这是我第一次使用一个框架:) 我将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
答案 0 :(得分:6)
您需要知道的第一件事是访问$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']);
});
添加构造函数sur 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'];