PHPackages                             roco/nanoframe - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. roco/nanoframe

ActiveProject[Framework](/categories/framework)

roco/nanoframe
==============

Um pequeno framework extremamente simples para php

1.5.8(11mo ago)023MITPHPPHP &gt;=7.4

Since Aug 13Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/rocooliveira/nanoframe)[ Packagist](https://packagist.org/packages/roco/nanoframe)[ RSS](/packages/roco-nanoframe/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (1)Versions (20)Used By (0)

Nanoframe
=========

[](#nanoframe)

NanoFrame é um pequeno framework extremamente simples para php. Para projetos pequenos onde você precisa de dinamismo e rapidez

Instalação
----------

[](#instalação)

Clone o repositório ou faça download manual dos arquivos para seu diretório

```
git clone https://github.com/rocooliveira/nanoframe.git
```

#### Usando composer

[](#usando-composer)

```
composer create-project roco/nanoframe meu-diretorio
```

Substitua *meu-diretorio* pelo nome do diretório no qual deseja que o projeto seja executado.

O comando acima criará uma pasta **meu-diretorio** .

Se você omitir o argumento “meu-diretorio”, o comando criará um diretório “nanoframe”, que pode ser renomeado conforme apropriado.

Uso
---

[](#uso)

### Setando rotas

[](#setando-rotas)

Definia suas rotas no arquivo `route.php` no diretório `app/Config`

```
// routes.php

return [
    'index' => 'HomeController',
    'sobre' => 'AboutController',
    'contato[POST]' => 'ContactController',
    'admin[GET]' => 'admin\AdminController',
    'admin/dashboard[GET]' => 'admin\DashboardController',
];
```

Neste exemplo, a rota `index` mapeia para o `HomeController`. Por `index` é a rota padrão que deve ser setada como rota de entrada. A rota `about` mapeia para o `AboutController`, e a rota `contact` com `[POST]` especifica que aceita apenas solicitações POST e mapeia para o `ContactController`. Além disso, a rota `admin` mapeia para o `AdminController`, e a rota `admin/dashboard` mapeia para o `DashboardController`.

Você também pode especificar mais de um método permitido passando cada um separado por virgula entre os colchetes. ex: `[GET,POST]` (Por padrão o sistema assume todas rotas com sem métodos definidos como `GET`)

#### Subnamespaces em Rotas

[](#subnamespaces-em-rotas)

Você pode definir subnamespaces dentro de suas rotas usando colchetes. Por exemplo:

```
// Routes.php

return [
    'admin[GET]' => 'admin/[Admin/AdminController]',
    'admin/dashboard[GET]' => 'admin/[Admin/DashboardController]',
];
```

Neste exemplo, a rota `admin` especifica o `AdminController`, e a rota `admin/dashboard` especifica o `DashboardController` ambos dentro do namespace `Admin`.

Por padrão, cada controller que criar deve estar dentro do namespace raiz `App/Controller`. No caso acima os controllers foram separados em um sub-namespace específico para seu caso de uso, onde o namespace foi definido desta forma `namespace App/Controller/Admin;`

#### Curingas

[](#curingas)

Você pode usar alguns curingas que são aliases para expressões regulares que serão aplicados nas rotas.

##### (:any)

[](#any)

```
// Routes.php
return [
    'admin/dashboard/produtos/(:any)' => 'admin/ProductController',
];
```

A rota acima aceita no próximo segmento de url após "admin/dashboard/produtos/" qualquer segmento de url alfanumérico

##### (:num)

[](#num)

```
// Routes.php
return [
    'admin/dashboard/produto/(:num)' => 'admin/ProductController',
];
```

A rota acima aceita no próximo segmento de url após "admin/dashboard/produtos" qualquer segmento de url numérico

##### Segmentos opcionais:

[](#segmentos-opcionais)

(/:num)? (/:any)? (/\\b(str1|str2)\\b)?

```
// Routes.php
return [
    'admin/dashboard/produto(/:num)?' => 'admin/ProductController',
];
```

A rota acima aceita no próximo segmento de url após "admin/dashboard/produtos" qualquer segmento de url numérico, mas ele é opcional se for passado apenas "admin/dashboard/produtos" o controller também será chamado.

##### Fronteira enter possíveis segmentos de url pré-determinados: \\b(str1|str2)\\b

[](#fronteira-enter-possíveis-segmentos-de-url-pré-determinados-bstr1str2b)

```
// Routes.php
return [
    '/admin/\b(painel|dashboard)\b' => 'admin/DashboardController',
];
```

No exemplo acima o objetivo é que a rota seja válida se ela começar com "admin/" e o próximo segmento seja "painel" ou "dashboard",

### Controllers

[](#controllers)

Crie seus controllers no diretório `controller`. Os controllers devem seguir a convenção de nomenclatura PSR-4

Seus controllers devem estender o controller base do Nanoframe o `BaseControler`:

```
// HomeController.php

namespace App\Controller;
use Nanoframe\Core\BaseController;

class HomeController extends BaseController
{
    public function index()
    {
        echo "Bem-vindo à página inicial!";
    }
}

// admin/AdminController.php

namespace App\Controller\Admin;
use Nanoframe\Core\BaseController;

class AdminController extends BaseController
{
    public function index()
    {
        echo "Bem-vindo ao painel de administração!";
    }
}

// admin\DashboardController.php

namespace App\Controller\Admin;
use Nanoframe\Core\BaseController;

class DashboardController extends BaseController
{
    public function index()
    {
        echo "Este é o painel!";
    }
}
```

### Model

[](#model)

Crie seus models no diretório `model`. Os models devem seguir a convenção de nomenclatura PSR-4

Seus models devem extender o model base do Nanoframe o `BaseModel`

A classe `BaseModel` é uma camada de abstração para interagir com o seu banco de dados `MYSQL`.

```
