{"id":15028596,"url":"https://github.com/lukinhaadev/php-api-starter-template","last_synced_at":"2025-06-16T20:38:38.145Z","repository":{"id":234827369,"uuid":"789577637","full_name":"lukinhaadev/php-api-starter-template","owner":"lukinhaadev","description":"a simple API template made with PHP 8.3","archived":false,"fork":false,"pushed_at":"2024-08-07T12:43:13.000Z","size":16,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T20:44:20.568Z","etag":null,"topics":["api","controller","dao","model","php","php8","php83","routing","web"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukinhaadev.png","metadata":{"files":{"readme":"README-ptBR.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-21T00:15:44.000Z","updated_at":"2024-11-08T16:48:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"279ac801-3f0b-43be-819c-904369b6b65a","html_url":"https://github.com/lukinhaadev/php-api-starter-template","commit_stats":null,"previous_names":["lukinhaadev/php-api-starter-example"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/lukinhaadev/php-api-starter-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukinhaadev%2Fphp-api-starter-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukinhaadev%2Fphp-api-starter-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukinhaadev%2Fphp-api-starter-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukinhaadev%2Fphp-api-starter-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukinhaadev","download_url":"https://codeload.github.com/lukinhaadev/php-api-starter-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukinhaadev%2Fphp-api-starter-template/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260234226,"owners_count":22978961,"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","controller","dao","model","php","php8","php83","routing","web"],"created_at":"2024-09-24T20:08:42.767Z","updated_at":"2025-06-16T20:38:38.115Z","avatar_url":"https://github.com/lukinhaadev.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Docs available in [en-US](README.md)\n\n# Modelo inicial de API PHP 💻\n\n## Pré-requisitos 🛠️\n\n- PHP instalado em sua máquina. 🐘\n- Composer instalado em sua máquina. 📦\n- Banco de dados MySQL configurado. 🗄️\n- Entendimento básico de programação em PHP. 🧠\n\n## Instalação de Dependências 🚀\n\n1. Clone o projeto ou baixe o template para o seu diretório local. 📂\n\n2. Navegue até o diretório do projeto e execute o seguinte comando para instalar as dependências:\n\n    ```bash\n    composer install\n    ```\n\n3. Isso irá instalar todas as dependências listadas no arquivo `composer.json` e garantir que você trabalhe com as versões exatas especificadas em `composer.lock`. 🔒\n\n## Configuração de Variáveis de Ambiente ⚙️\n\n1. Localize o arquivo [.env.example](.env.example) no diretório do projeto. 🗂️\n\n2. Renomeie o arquivo para `.env`:\n\n    Prompt de Comando:\n    ```cmd\n    rename .env.example .env\n    ```\n    \n    PowerShell:\n    ```powershell\n    mv .env.example .env\n    ```\n\n3. Abra o arquivo `.env` em um editor de texto e configure as variáveis de ambiente conforme necessário: 📝\n\n    - **API Configuration:**\n        - `API_HOST`: O endereço onde a API será executada (por exemplo, `localhost`). 🌐\n        - `API_PORT`: A porta em que a API será executada (por exemplo, `8000`). 🔌\n        - `TIMEZONE`: O fuso horário da aplicação (por exemplo, `America/Sao_Paulo`). 🕰️\n\n    - **Database Configuration:**\n        - `DB_HOST`: O endereço do servidor de banco de dados. 🏠\n        - `DB_PORT`: A porta do servidor de banco de dados. 🔌\n        - `DB_USER`: O nome de usuário para acessar o banco de dados. 👤\n        - `DB_PASS`: A senha para acessar o banco de dados. 🔑\n        - `DB_NAME`: O nome do banco de dados. 🏷️\n\n4. Salve as alterações no arquivo `.env`. 💾\n\n## Configurando DAO, Model e Controller 🛠️\n\n### DAO (Data Access Object) 🗃️\n\n1. Crie uma classe DAO para cada entidade do banco de dados (por exemplo, `UserDAO` para a tabela `users`). 👥\n\n2. Implemente métodos para operações específicas, como `selectAll()`. 💼\n\n3. Use a conexão com o banco de dados para executar consultas SQL. 💻\n\n#### Aqui está um exemplo de UserDAO:\n\n```php\n\u003c?php\n\nnamespace App\\DAO;\n\nclass UserDAO extends DAO\n{\n    // Construtor para inicializar o objeto UserDAO\n    public function __construct()\n    {\n        // Chama o construtor da classe pai (DAO) para inicializar a conexão com o banco de dados\n        parent::__construct();\n    }\n\n    // Método para selecionar todos os registros da tabela \"User\"\n    public function selectAll()\n    {\n        // Definição da consulta SQL para selecionar todos os registros da tabela \"User\"\n        $sql = \"SELECT * FROM User\";\n\n        // Prepara a consulta SQL usando a conexão com o banco de dados\n        $stmt = $this-\u003econn-\u003eprepare($sql);\n\n        // Executa a consulta preparada\n        $stmt-\u003eexecute();\n\n        // Retorna todos os resultados da consulta como objetos de classe (baseado na classe DAO)\n        return $stmt-\u003efetchAll(DAO::FETCH_CLASS);\n    }\n}\n```\n\n### Model 🧩\n\n1. Crie uma classe Model para cada entidade do banco de dados (por exemplo, `UserModel`). 👤\n\n2. Defina atributos para representar as colunas da tabela de banco de dados. 📊\n\n3. Implemente métodos para interagir com o DAO, como `getAll()`. 🛠️\n\n#### Aqui está um exemplo de UserModel:\n\n```php\n\u003c?php\n\nnamespace App\\Model;\n\nuse App\\DAO\\UserDAO;\nuse Exception;\n\nclass UserModel extends Model\n{\n    // Atributos públicos para representar as colunas da tabela User\n    public $id, $name;\n\n    // Método para obter todos os registros da tabela User\n    public function getAll()\n    {\n        try {\n            // Cria uma instância de UserDAO para acessar a camada de dados\n            $dao = new UserDAO();\n            // Chama o método selectAll() de UserDAO para obter todos os registros\n            // Os resultados são armazenados na propriedade $rows\n            $this-\u003erows = $dao-\u003eselectAll();\n        } catch (Exception $e) {\n            // Lança uma exceção em caso de erro durante a execução\n            throw $e;\n        }\n    }\n}\n```\n\n### Controller ⚙️\n\n1. Crie uma classe Controller para cada recurso ou conjunto de funcionalidades da sua API (por exemplo, `UserController`). 💡\n\n2. No Controller, crie métodos para responder a solicitações HTTP específicas, como `GET`, `POST`, `PUT`, e `DELETE`. 📝\n\n3. Chame os métodos do Model para processar os dados recebidos das solicitações e envie respostas apropriadas ao cliente. 📨\n\n#### Aqui está um exemplo de UserController:\n\n```php\n\u003c?php\n\nnamespace App\\Controller;\n\nuse App\\Model\\UserModel;\n\nclass UserController extends Controller\n{\n    // Método estático que será executado quando a rota correspondente for acessada\n    public static function index(): void\n    {\n        // Cria uma nova instância de UserModel para acessar a camada de modelo\n        $model = new UserModel;\n        \n        // Chama o método getAll() de UserModel para obter todos os registros\n        $model-\u003egetAll();\n        \n        // Envia a resposta em formato JSON contendo os registros obtidos\n        parent::sendJSONResponse($model-\u003erows);\n    }\n}\n```\n\n## Registrando as rotas da api ↪️\n\n1. Adicione as rotas necessárias no arquivo [routes.php](App/routes.php):\n\n```php\n\u003c?php\nuse App\\Controller\\UserController;\nuse App\\Modules\\HttpMethod;\nuse App\\Modules\\Router;\n\nRouter::request(HttpMethod::GET, \"/users\", [UserController::class, \"index\"]);\n```\n\n## Iniciando a Aplicação 🏁\n\n1. Para iniciar a aplicação, execute o seguinte comando no diretório raíz do projeto:\n\n    ```bash\n    php api start\n    ```\n\n2. Isso iniciará o servidor no endereço e porta definidos em `.env`.\n\n## Testando a API 🧪\n\n1. Faça chamadas HTTP aos endpoints da sua API para verificar se tudo está funcionando conforme esperado. ✅\n\n2. Use ferramentas como Insomnia para enviar solicitações `GET`, `POST`, `PUT`, e `DELETE`. 📮\n\n3. Verifique as respostas para garantir que os dados sejam processados corretamente. ✔️","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukinhaadev%2Fphp-api-starter-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukinhaadev%2Fphp-api-starter-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukinhaadev%2Fphp-api-starter-template/lists"}