2

私はこのミニフレームワークを初めて試していますが、フレームワークだけを使用するのはこれが初めてです:)
私は次のように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 変数にアクセスする方法がわかりません。

一方で、私がオンラインで見つけることができるすべてのチュートリアルは紛らわしく、.phar ファイルを含む古い Silex のバージョンを参照しており、現在は廃止されており、私が見つけたすべての例のディレクトリ構造は私のものとは異なります (fatサイレックスzipファイル)

私のプロジェクトのディレクトリ構造は次のとおりです。

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

1 に答える 1

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'];
于 2012-07-05T14:01:24.380 に答える