Интеграция silex с Redbean orm

У кого-нибудь есть идеи, как интегрировать Red bean ORM в Silex. Любые доступные примеры/документы. Пожалуйста, помогите мне.

Спасибо


person aniltc    schedule 07.03.2014    source источник


Ответы (4)


Это очень простая установка, показанная ниже.

Поскольку Redbean предоставляет фасад статического класса RedBean_Facade, который в документации обозначается как R, нет необходимости регистрировать его как службу приложения Silex.

В идеале вы должны установить и Silex, и Redbean с Composer. На странице 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();
person Adam Elsodaney    schedule 08.03.2014
comment
Должен ли я указывать на каждой странице эти строки подключения? Есть ли что-нибудь похожее на parmeters.yml? - person aniltc; 08.03.2014
comment
В Silex не совсем так, как все может быть в одном PHP-файле, как, например, код в моем ответе. Однако вы можете установить компонент Symfony Yaml и разобрать свой собственный файл, например $parameters = Yaml::parse(file_get_contents('parameters.yml')). Когда вы говорите о каждой странице, вы имеете в виду каждое действие маршрута/контроллера, которое отображает страницу? - person Adam Elsodaney; 01.10.2014
comment
Я только что понял, что вы разместили комментарий некоторое время назад. Извините за задержку с ответом. - person Adam Elsodaney; 01.10.2014

Я создал поставщика услуг для RedBean в Silex.
Просто поместите это в свой композитор. .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');
person ivoba    schedule 07.10.2014
comment
Ваш поставщик услуг не работает с новейшей версией redbean, когда я пытался ее добавить. Будете ли вы добавлять поддержку версии 4.0+? из красной фасоли? - person Joseph Astrahan; 26.12.2015
comment
я добавил поддержку 4.0 сейчас, в версии ~ 2.0 - person ivoba; 30.12.2015


Я сделал это только сегодня. Просто загрузите с помощью Composer обе библиотеки (Silex и RedBean). Убедитесь, что у вас есть выпуск Fat Silex, чтобы оставаться в безопасности. И... чтобы сделать элегантный способ, вы должны создать контроллер, который загружает RedBean, а затем сделать контроллер в качестве поставщика услуг, тогда у вас будет возможность настройки RedBean в любом месте вашего приложения. В ближайшие дни буду делать RedBeanServiceProvider.

person Giorgio Tedesco    schedule 18.03.2014