I'm trying this mini framework for the first time and this is my first time at all using justa a framework:)
I added the doctrine service to my index.php file like this:
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_sqlite',
'path' => __DIR__.'/../include/database.sqlite',
),
));
and I create a new file with a class with a static method that resturn an array, for example.
<?php
namespace MyNameSpace;
class myClass{
static function getStuff(){
return array(1 => array('foo'=> 'bar',
'bar' => 'foo',
)
);
}
}
As you can see it's hardcoded so I decide to use a database (sqlite is enought) but I don't know how to get access to $app variable inside my file.
On the other way, all the tutorials that I can find online are confusing and referred to a old Silex's version with the .phar file that now is deprecated, and the directory structures of all examples I found are differente from mine (taken from the fat Silex zip file)
The directory structure of my project is this:
├── composer.json
├── composer.lock
├── src
│ └── MyNameSpace
│ └── myClass.php
├── vendor
│ └── composer
│ └── doctrine
│ └── silex
│ └── ...
│ └── **autoload.php**
└── web
└── css
└── img
└── js
└── views
└── .htaccess
└── index.php
First thing you need to know is that accessing $app
is a bad practice. You should DI when it is possible. If you really want to do that, check the code below.
Inside index.php
(usually bootstrap.php
) declare a new service:
$app['my_class'] = $app->share(function() use ($app) {
// Retrieve the db instance and create an instance of myClass
return new \MyNameSpace\myClass($app['db']);
});
Add a constructor 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;
}
// ...
}
Then you can retrieve a fully initialized instance of myClass
like this:
$myClass = $app['my_class'];