{"id":26452132,"url":"https://github.com/drmcarvalho/caracal","last_synced_at":"2025-03-18T17:26:26.350Z","repository":{"id":62499628,"uuid":"224514653","full_name":"drmcarvalho/caracal","owner":"drmcarvalho","description":"Caracal nano-framework","archived":false,"fork":false,"pushed_at":"2020-07-14T19:05:42.000Z","size":30,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-24T19:05:10.042Z","etag":null,"topics":["api-rest","caracal","framework","nano-framework","php","router","simple"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drmcarvalho.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-27T20:48:29.000Z","updated_at":"2023-08-22T05:02:45.000Z","dependencies_parsed_at":"2022-11-02T11:47:21.630Z","dependency_job_id":null,"html_url":"https://github.com/drmcarvalho/caracal","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drmcarvalho%2Fcaracal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drmcarvalho%2Fcaracal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drmcarvalho%2Fcaracal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drmcarvalho%2Fcaracal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drmcarvalho","download_url":"https://codeload.github.com/drmcarvalho/caracal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244267791,"owners_count":20425897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","caracal","framework","nano-framework","php","router","simple"],"created_at":"2025-03-18T17:26:25.710Z","updated_at":"2025-03-18T17:26:26.339Z","avatar_url":"https://github.com/drmcarvalho.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# O que é o Caracal?\n\nCaracal é um simples e extensivo nano-framework Action Based que permite você desenvolver pequenas aplicações Web e APIs RESTful de maneira rapida e fácil. Ele possui o [Medoo](https://medoo.in/) como um database framework para gerenciar e manipular o banco de dados.\n\n# License\n\nCaracal é licenciado sobre a licença MIT.\n\n# Instalação\n\n1. Baixe os arquivos `Caracal.php` e `Medoo.php` e crie a pasta template no diretório root no qual vai conter seus templates/views.\n\n2. Configure seu servidor Apache criando o arquivo  `.htaccess` com o seguinte conteúdo:\n\n```\n\u003cIfModule mod_negotiation.c\u003e\n    Options -MultiViews\n\u003c/IfModule\u003e\n\nIndexIgnore *\n\nRewriteEngine On\n\n# Check file or folders exists\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteCond %{REQUEST_FILENAME} !-f\n\n# Redirect all urls to index.php if no exits files/folder\nRewriteRule ^ index.php [L]\n```\n\n3. Crie seu arquivo `app.php`.\n\nInclua o framework e defina uma instancia para ele:\n```php\nrequire_once 'Caracal.php';\n\n$app = new Caracal();\n```\nOu se você preferir pode passar o array com as opções do seu banco de dados que o Caracal vai setar a instancia do Medoo internamente:\n```php\n$app = new Caracal([\n\t'database_type' =\u003e 'mysql',\n\t'database_name' =\u003e 'minhabase',\n\t'server' =\u003e 'localhost',\n\t'username' =\u003e 'meuusuario',\n\t'password' =\u003e 'minhasenha'\n]);\n```\nVeja na [documentação do Medoo](https://medoo.in/api/new) como conecta-lo com os SGBDs.\n\nCrie seu arquivo de ações (rotas):\n```php\nrequire_once 'actions.php';\n```\n\nDentro do arquivo `actions.php` defina sua ação (rota) atribuinto uma função para manipular a requisição HTTP:\n```php\n$app-\u003eaction('/hello', 'GET', function() {\n\techo 'Ola mundo!';\n});\n```\n\nInclua o php `actions.php` no arquivo `app.php`:\n```php\nrequire_once 'actions.php';\n```\n\nFinalmente, no arquivo `index.php` inclua o php `app.php` e inicie o framework:\n```php\nrequire_once 'app.php';\n\n$app-\u003erun();\n```\n\n# Roteamento\n\nO roteamento é feito mapeando uma URL para um callback na função `action()` do framework.\n```php\n$app-\u003eaction('/hello', 'GET', function () {\n\techo 'Ola mundo!';\n});\n```\n\n## Views\n\nPara retornar uma view use a função `render()` como no exemplo:\n```php\n$app-\u003eaction('/home', 'GET', function () use ($app) {\n\t$app-\u003erender('home', ['variavel' =\u003e 'Caracal']);\n});\n```\n\nO Caracal vai buscar pelo template especificado na pasta `templates` através do nome do primeiro argumento.\n\n## Json\n\nRespostas em json podem ser retornadas através da função `json()` como no exemplo:\n```php\n$app-\u003eaction('/api/hello', 'GET', function () use ($app) {\t\n\t$app-\u003ejson(['versao' =\u003e '1.0', 'descricao' =\u003e 'Caracal nanoframework']);\n});\n```\n\n# Redirecionamento\n\nO Redirecionamento é feito pela função `redirect()` onde o parametro `to` é para onde vai ser redirecionado, por padrão é definido o código 302 para o redirecionamento, através do parametro `stop` pode encerrar o a ação ou continuar o processamento.\n```php\n$app-\u003eaction('/teste', 'GET', function () use ($app) {\n\t$app-\u003eredirect('home');\t\n});\n```\n\n# Banco de dados\n\nPara usar a instancia do Medoo utilize a propriedade `database` do framework:\n```php\n$app-\u003eaction('/fornecedores', 'GET', function () use ($app) { \n\t$fornecedores = $app-\u003edatabase-\u003eselect('fornecedores', ['nome']);\n\t$app-\u003ejson($fornecedores);\n});\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrmcarvalho%2Fcaracal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrmcarvalho%2Fcaracal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrmcarvalho%2Fcaracal/lists"}