2012-07-05 9 views
2

我第一次嘗試這個迷你框架,這是我第一次使用Justa框架:)
我將doctrine服務添加到我的索引.php文件是這樣的:如何從Silex中的自定義文件/類連接到數據庫

$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是足夠多),但我不知道如何讓我的文件中獲得$應用程序變量。

另一方面,我可以在網上找到的所有教程都令人困惑,並且引用了一箇舊的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 

回答

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']); 
}); 

添加一個構造函數河畔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']; 
+0

對不起,我的無知ance,但我沒有boostrap.php文件。每個人都在談論這個文件,但沒有人解釋在哪裏叫它。我編輯我的目錄結構的第一個答案,如果你可以請告訴我在哪裏調用引導文件,謝謝 – Kreker 2012-07-05 14:13:46

+0

**編輯1:**現在檢索數據庫連接,而不是'$ app' – Florent 2012-07-05 14:14:35

+0

**編輯2:* *將'bootstrap.php'重命名爲'index.php' – Florent 2012-07-05 14:16:09

相關問題