Dev (Back & Front)ARTIGO

Silex + Respect\Relational – uma boa dupla

Ambos são importantes projetos para a comunidade PHP.

Fala, galera, beleza?

Neste artigo, vamos falar um pouco a respeito de dois importantes projetos para a comunidade PHPPHP44 conteúdosPadronizando seu código com PHP CS FixerDev (Back & Front) · mai 2019Docker de imagem. Para rodar projetos PHP em menos de 30 segundosDev (Back & Front) · jan 2026PHP 7.3: conheça as novidades desta versãoDev (Back & Front) · abr 2019Ver tudo em Dev (Back & Front) , um deles é o micro-framework Silex, criado pelo francês Fabien Potencier junto com Igor Wiedler, e o outro é o Respect\Relational, um ORM criado pelo Alexandre Gaigalas, o famoso @alganet.

O Silex é um micro-framework que, como o próprio site diz, foi construido sobre os ombros do Symfony2 e do Pimple, conciso, extensível e testável como toda aplicação deve ser.

O Respect\Relational é um excelente ORM fácil de usar/configurar, com features bem interessantes e uma incrível interface. Ele faz com que escrever consultas ao banco de dadosBanco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data seja muito mais compreensível para nós, humanos.

Quais são as vantagens de usar um micro-framework? Bom, na minha opinião os micro-frameworks são mais flexíveis que frameworks, a responsabilidade de uma boa organização/arquitetura da aplicação depende muitos mais do desenvolvedor do que necessariamente do micro-framework.

Aí você me pergunta: tá, mas e as desvantagens? E aí eu te respondo: cara, use pra saber, mas no geral ele não tem toda aquela “ajuda” que os frameworks te dão e também não é indicado para aplicações muito grandes, apesar de isso não ser de fato uma restrição.

Bom, tudo que eu falei são opiniões e, é claro, as suas podem ser diferentes, então fique à vontade para comentar.

Depois de tudo isso vamos para a parte de código do artigo. O Silex trabalha com Providers, e eu criei o RespectRelationalServiceProvider, para usar o Mapper do Respect\Relational.

Registrar um provider é bem tranquilo, é só fazer como no código abaixo:

<?php
    use Silex\Application;
    use Carminato\Silex\Provider\Respect\RespectRelationalServiceProvider;

    $app = new Application;

    $app->register(new RespectRelationalServiceProvider(), array(
            'respect.pdo.instances' => array(new \PDO('sqlite::memory:'))
        )
    );

 

Depois de feito isso, você pode pegar o Mapper default (sempre o primeiro definido) em qualquer lugar da aplicação em que você tenha a sua “$app” desta forma:

<?php
    $mapper = $app['respect.mapper'];

A partir daí, você pode utilizar todas as features do Mapper do Respect\Relational que estão no Github do projeto da maneira que quiser.

Olha como ficaria uma rota que recebe dados de um formulário para criar um autor, por exemplo:

public function autorCreate(Request $request)
    {
        $form = $this->app['form.factory']
            ->createBuilder(new AutorForm(),array())
            ->getForm()
        ;

        if ('POST' == $request->getMethod()) {
            $form->bind($request);

            if ($form->isValid()) {
                $mapper = $this->app['respect.mapper'];
                $data = $form->getData();

                $autor = new stdClass;
                $autor->name = $data['autor'];
                $autor->created_at = date('Y-m-d H:i:s');

                $mapper->autor->persist($autor);
                $mapper->flush();

                return $this->app->redirect('/admin/autor');
            }
        }

        return $this->app['twig']->render('Autor/admin/add.html.twig', array(
                'form' => $form->createView()
            )
        );
    }

 

No exemplo acima eu estou utilizando, além do provider do Respect\Relational, o de Form e o do Twig.

Ah e quer saber como ficaria a atualização desse autor? Deste jeito aqui:

public function autorUpdate($id, Request $request)
    {
        $mapper = $this->app['respect.mapper'];

        $autor = $mapper->autor[$id]->fetch();

        if (! $autor) {
            $this->app->abort(404, "Autor $id não existe.");
        }

        $form = $this->app['form.factory']
            ->createBuilder(new AutorForm(), array())
            ->getForm()
        ;

        if ('POST' == $request->getMethod()) {
            $form->bind($request);

            if ($form->isValid()) {
                $data = $form->getData();

                $autor->name = $data['autor'];

                $mapper->autor->persist($autor);
                $mapper->flush();

                return $this->app->redirect('/admin/autor');
            }
        }

        return $this->app['twig']->render('Autor/admin/edit.html.twig', array(
                'form' => $form->createView(),
                'autor' => $autor
            )
        );
    }

Bem legal, né?

Bom, galera, era isso. Se você se interessou por algum desses dois, você pode visitar o site do Silex e o Github do Respect\Relational para aprender mais.

Valeu e keep learning!

é coordenador de desenvolvimento da A2 Comunicação, formado em Ciência da Computação, Pós-Graduando em Engenharia de Software e Zend Certified Engineer PHP. Trabalha como Web-Developer desde 2008, quando começou estagiando na própria A2 Comunicação. Com conhecimento em diversas tecnologias web, mantém como foco principal a linguagem PHP, além de ser entusiasta da comunidade PHPSP e tecnologias OpenSource.

Ver perfil