Skip to content

About

O Framework Selene foi desenvolvido para tornar mais simples as tarefas comuns utilizadas na maioria dos projetos da web.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

29 Commits

Folders and files

Repository files navigation

Selene Framework

O Selene é uma micro-framework PHP.

Selene foi desenvolvido para tornar mais simples as tarefas comuns utilizadas na maioria dos projetos da web, selene possui:

  • Sistema de MVC
  • Sistema de roteamento
  • Sistema de injeção de dependência
  • Gerenciamento de sessão
  • Autenticação de usuário
  • Query Builder para banco de dados Mysql e MongoDB.
  • Sistema de template engine
  • Sistema de Middleware
  • Sistema de redirecionamento de usuário
  • Gerenciamento do sistema de arquivos
  • Gerenciamento de Logs

Instalação

É recomendável que você use Composer para instalar selene.

$ composer require ovalves/selene "dev-master@dev"

Isso instalará Selene e todas as suas dependências. Selene requer PHP 8.0 ou superior.

Uso básico

Crie um arquivo index.php com o seguinte conteúdo:

<?php

require 'vendor/autoload.php';

/*
|--------------------------------------------------------------------------
| Obtendo uma instância de Selene Framework
|--------------------------------------------------------------------------
|
| '/var/www/html/app/' é o mapeamento da raiz da nossa aplicação
*/
$app = Selene\App\Factory::create('/var/www/html/app/');

/*
|--------------------------------------------------------------------------
| Usando o roteador para registrar as rotas da sua aplicação
|--------------------------------------------------------------------------
| No caso abaixo, estamos criando um grupo nomeado 'auth'
|
| A criação de grupo de rotas serve para facilitar a utilização dos middlewares
*/
$app->route()->group('auth', function () use ($app) {

    /*
    |--------------------------------------------------------------------------
    | Neste caso, estamos adicionando o middleware de autentição
    |--------------------------------------------------------------------------
    | Esse middleware será executado em todas as rotas que pertencerem a esse grupo
    */
    $app->route()->middleware([new Selene\Middleware\Handler\Auth]);

    /*
    |--------------------------------------------------------------------------
    | Esta rota responde como um callable
    |--------------------------------------------------------------------------
    */
    $app->route()->get('/callable', function () use ($app) {
        $app->json('Hello World!!!');
    });

    /*
    |--------------------------------------------------------------------------
    | Mapeamento de método HTTP da request com a solicita~ HTTP de solicitação
    |--------------------------------------------------------------------------
    */
    $app->route()->get('/', 'HomeController@index');
    $app->route()->get('/show/{id}', 'HomeController@show');
    $app->route()->update('/show/{id}', 'HomeController@show');
    $app->route()->delete('/show/{id}', 'HomeController@show');
    $app->route()->post('/show', 'HomeController@login');
})->run();

Criando uma controller

Crie um arquivo dentro da pasta Controllers com o seguinte conteúdo:

<?php

use Selene\Controllers\BaseController;
use Selene\Request\Request;
use Selene\Response\Response;
use Selene\Render\View;

class HomeController extends BaseController
{
    public function index(Request $request, Response $response): View
    {
        return $this->view()->render(
            'pages/home',
            [
                'pageTitle' => 'Home'
            ]
        );
    }
}

Utilizando o Query Builder

Podemos utilizar o query builder a partir dos gateways:

<?php

use Selene\Gateway\GatewayAbstract;

class Gateway extends GatewayAbstract
{
    public function select()
    {
        $books = $this->select('*')
                      ->table('movies')
                      ->where(['title = ?' => 'Toy Story'])
                      ->execute()
                      ->fetchAll();
    }

    public function insert()
    {
        $this->insert(['id' => 1, 'title' => 'Toy Story'])
             ->table('movies')
             ->execute();
    }

    public function update()
    {
        $this->update(['title' => 'Toy Story'])
             ->table('movies')
             ->where(['id = ?' => 1])
             ->execute();
    }

    public function delete()
    {
        $this->delete()
             ->table('movies')
             ->where(['id = ?' => 1])
             ->execute();
    }
}

Trabalhando com os dados da Request

<?php

class HomeController extends BaseController
{
    public function index(Request $request, Response $response)
    {
        /*
        |--------------------------------------------------------------------------
        | Pegando os dados enviados via POST
        |--------------------------------------------------------------------------
        */
        $request->getPostParams();

        /*
        |--------------------------------------------------------------------------
        | Pegando os dados enviados via GET
        |--------------------------------------------------------------------------
        */
        $request->getGetParams();

        /*
        |--------------------------------------------------------------------------
        | Pegando os dados enviados via PUT
        |--------------------------------------------------------------------------
        */
        $request->getPutParams();

        /*
        |--------------------------------------------------------------------------
        | Pegando os dados enviados via DELETE
        |--------------------------------------------------------------------------
        */
        $request->getDeleteParams();

        /*
        |--------------------------------------------------------------------------
        | Pegando os dados do corpo da requisição
        |--------------------------------------------------------------------------
        */
        $request->getContentBody();

        /*
        |--------------------------------------------------------------------------
        | Pegando todos os dados da requisição
        |--------------------------------------------------------------------------
        */
        $request->all();
    }
}

Trabalhando com autenticação na Controller

Se você estiver usando o middleware de autenticação, você pode testar se o usuário está logado.

<?php
class HomeController extends BaseController
{
    public function index(Request $request, Response $response)
    {
        if ($response->isUnauthorized()) {
            $response->redirectToLoginPage();
        }
    }
}

Se você estiver usando o middleware de autenticação, você pode registrar e autenticar os usuários

<?php

use Selene\Container\ServiceContainer;

class HomeController extends BaseController
{
    public function register(Request $request, Response $response)
    {
        /*
        |--------------------------------------------------------------------------
        | Pegando o objete de autenticação via Service Container
        |--------------------------------------------------------------------------
        */
        $auth = app()->container()->get(ServiceContainer::AUTH);
        $data = $request->getPostParams();

        /*
        |--------------------------------------------------------------------------
        | Registrando um usuário
        |--------------------------------------------------------------------------
        */
        $auth->registerUser($data['email'], $data['password']);
    }

    public function isAuthenticated(Request $request, Response $response): View
    {
        $auth = app()->container()->get(ServiceContainer::AUTH);

        if ($auth->isAuthenticated()) {
            return $this->view()->render('home');
        }

        redirect()
            ->message('failed', 'Erro ao fazer login. Usuário ou senha incorretos!')
            ->back();
    }

    public function logout(Request $request, Response $response)
    {
        $auth = app()->container()->get(ServiceContainer::AUTH);
        $auth->logout();

        redirect()
            ->to('url')
            ->message('success', 'Sua sessão foi finalizada!')
            ->go();
    }
}

Alterando os parâmetros de configuração do framework

Altere o arquivo app.php dentro da pasta Config

return [
    /*
    |--------------------------------------------------------------------------
    | Configurações de conexação com a base de dados
    |--------------------------------------------------------------------------
    */
    ConfigConstant::DATABASE => [
        'mysql' => [
            DatabaseConstant::DB_HOST => env('MYSQL_HOST'),
            DatabaseConstant::DB_NAME => env('MYSQL_DATABASE'),
            DatabaseConstant::DB_USER => env('MYSQL_ROOT_USER'),
            DatabaseConstant::DB_PASS => env('MYSQL_ROOT_PASSWORD'),
        ],
        DatabaseConstant::DEFAULT_DB => 'mysql',
    ],
    /*
    |--------------------------------------------------------------------------
    | Configurações do sistema de autenticação do framework
    |--------------------------------------------------------------------------
    */
    ConfigConstant::AUTH => [
        ConfigConstant::AUTH_TABLE_NAME => 'users',
        ConfigConstant::AUTH_LOGIN_URL => env('APP_URL') . '/client/signin',
        ConfigConstant::AUTH_REDIRECT_SUCCESS_LOGIN => env('APP_URL'),
        ConfigConstant::AUTH_REDIRECT_FAILED_LOGIN => env('APP_URL') . '/client/signin',
    ],
    /*
    |--------------------------------------------------------------------------
    | Configurações do sistema de sessão do framework
    |--------------------------------------------------------------------------
    */
    ConfigConstant::SESSION => [
        ConfigConstant::SESSION_TABLE_NAME => 'session',
        ConfigConstant::SESSION_EXPIRATION_TIME => 3600,
        ConfigConstant::SESSION_REFRESH_TIME => 3600,
    ],

    /*
    |--------------------------------------------------------------------------
    | Habilita ou desabilita os módulos do framework
    |--------------------------------------------------------------------------
    */
    ConfigConstant::ENABLE_SESSION_CONTAINER => true,
    ConfigConstant::ENABLE_AUTH_CONTAINER => true,
    ConfigConstant::ENABLE_CACHE_VIEWS => false,
];

Trabalhando com a template engine

As views do framework ficam na pasta public/Views:

Crie um arquivo chamado template.html com o seguinte conteúdo

{{ include /partials/header.html }}
    <div class="wrapper">
        {{ include /components/navbar.html }}
        <div class="content-wrapper">
            <section class="content">
                <div class="container-fluid">
                    {{ yield content }}
                </div>
            </section>
        </div>
    </div>
{{ include /partials/footer.html }}

No código acima, definimos um template que pode ser extendido por outras páginas do sistema.

Crie um arquivo chamado home.html

{{ extends template.html }}

{{ block content }}
    <p>Olá Mundo</p>
{{ endblock }}

No código acima, criamos uma view que extende do template.html.

Outros recursos da template engine

<?php

/*
|--------------------------------------------------------------------------
| Utilizando código PHP dentro da template engine
|--------------------------------------------------------------------------
*/
{{ (foreach $books as $book): }}
    <p>{{ $book['terror'] | lower }}</p>
    <p>{{ $book['romance'] | upper }}</p>
    <p>{{ $book['action'] | upper }}</p>
{{ endforeach }}

/*
|--------------------------------------------------------------------------
| Ecoando texto dentro da template engine
|--------------------------------------------------------------------------
| No exemplo acima além de ecoar o texto também estamos aplicando um modificador no texto
|
| O modificador aplicado transforma o texto em maiusculo
*/
{{ 'olá mundo!!!' | upper }} // 'OLÁ MUNDO!!!'

Usando o console de linha de comando do Selene

Pedindo ajuda

php solvr --help

Pedindo ajuda do console para criar controllers

php solvr generate:controller --help

Criando uma controller simples

php solvr generate:controller simpleController

Criando uma controller de recursos (irá criar actions para todos os verbos HTTP)

php solvr generate:controller resourceController --resource

Licença

O Selene framework é usa a licença MIT license. Veja License File para maiores informações.

About

O Framework Selene foi desenvolvido para tornar mais simples as tarefas comuns utilizadas na maioria dos projetos da web.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages