将silex与Redbean orm集成

时间:2014-03-07 17:51:59

标签: orm silex redbean

任何人都知道如何在Silex中集成Red bean ORM。任何可用的示例/文档。请帮助我。

由于

4 个答案:

答案 0 :(得分:3)

这是一个非常基本的设置,如下所示。

由于Redbean提供了一个静态类外观RedBean_Facade,在文档中称为R,因此几乎不需要将其注册为Silex应用程序的服务。

理想情况下,您应该使用Composer安装Silex和Redbean。在Redbean Github页面上,它告诉您如何将它与Composer一起使用。

<?php

require __DIR__.'/vendor/autoload.php';

use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use RedBean_Facade as R;

$app = new Application();

$app['db.connection.default.driver'] = "mysql";
$app['db.connection.default.host'] = "localhost";
$app['db.connection.default.name'] = "mydatabase";
$app['db.connection.default.user'] = "user";
$app['db.connection.default.password'] = "password";

$app['db.connection.default.rsn'] = $app->share(function () use ($app) {
    return sprintf('%s:host=%s;dbname=%s',
        $app['db.connection.default.driver'],
        $app['db.connection.default.host'],
        $app['db.connection.default.name']
    );
});

R::setup(
    $app['db.connection.default.rsn'],
    $app['db.connection.default.user'],
    $app['db.connection.default.password']
);

$app->get('/article/{id}/show', function ($id) {
    $article = R::load('article', $id );

    // do something with $article, then
    // return an HTML page of the article.
});

$app->get('/article/new', function () {
    // return an HTML page with a form that contains
    // input fields with HTML name attributes set to
    // 'title' and 'body' for example.
});

$app->post('/article/new', function (Request $request) use ($app) {
    $article = R::dispense('article');

    $article->title = $request->request->get('title');
    $article->body = $request->request->get('body');

    $id = R::store($article);

    return $app->redirect(sprintf('/article/%d/show', $id));
});

$app->run();

答案 1 :(得分:2)

我在Silex为RedBean做了Service Provider 只需将它放在您的composer.json中并更新:

"ivoba/redbean-service-provider": "dev-master"

然后注册提供者:

$app->register(new Ivoba\Silex\RedBeanServiceProvider(), array('db.options' => array( 'dsn' => 'sqlite:/tmp/db.sqlite' )));

像这样使用:

use RedBean_Facade as R;
...
$app['db']; //call once to init RedBean
...
$e = R::findAll('table',' ORDER BY date DESC LIMIT 2');

答案 2 :(得分:1)

FWIW,我还写了RedBean service provider for Silex。它允许您使用RedBean作为实例而不是静态Facade(我个人不喜欢):

$book = $app['redbean']->dispense('book');
$book->title = 'PHP for dummies';
$app['redbean']->store($book);

因此,您可以在Silex应用程序中使用RedBean,而无需在每个文件中使用use Redbean_Facade

这仍然是一项正在进行的工作,非常感谢所有的贡献:)

答案 3 :(得分:0)

我今天就做到了。 只需通过Composer加载两个库(Silex和RedBean)。确保发布Fat Silex以确保安全。 并且..为了制作一个优雅的方法,您应该创建一个加载RedBean的控制器,而不是将控制器作为服务提供者,然后您可以在应用程序的每个位置使用RedBean设置。 我将在下一天制作RedBeanServiceProvider。