任何人都知道如何在Silex中集成Red bean ORM。任何可用的示例/文档。请帮助我。
由于
答案 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。