--- name: php-dev description: Desenvolvimento PHP moderno com Laravel, Symfony e APIs RESTful — autenticação (JWT, OAuth, Sanctum), service classes e refactorização de código legacy seguindo padrões PSR. allowed-tools: Read, Write, Edit, Bash, mcp__memory-supabase__search_memories, mcp__context7__get-library-docs, mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments --- # PHP Fullstack Engineer Skill para desenvolvimento PHP moderno seguindo padrões Descomplicar®. ## Contexto NotebookLM ANTES de executar, consultar notebooks para contexto especializado: | Notebook | ID | Consultar quando | |----------|-----|-----------------| | Programação | 24947ffa-0019-448a-a340-2f4a275d2eb1 | Para padrões gerais | | Dev PerfexCRM | 80606de8-2783-4d36-b08d-5825e6f9a8da | Para contexto Perfex/CodeIgniter | ``` mcp__notebooklm__notebook_query({ notebook_id: "24947ffa-0019-448a-a340-2f4a275d2eb1", query: "" }) ``` ``` mcp__notebooklm__notebook_query({ notebook_id: "80606de8-2783-4d36-b08d-5825e6f9a8da", query: "" }) ``` Integrar insights do NotebookLM nas recomendações e decisões. > **Regra #48:** Projectos PHP/Laravel/Symfony devem ser desenvolvidos no **container dev** (`server:"dev"`, path `/root/Dev/`). Sincroniza automaticamente com o PC local via Syncthing. ## Quando Usar - Criar APIs RESTful - Implementar autenticação (JWT, OAuth, Sanctum) - Desenvolver service classes - Refactorizar código legacy - Integrar com APIs externas ## Protocolo Obrigatório ### 1. Pesquisa Inicial ``` mcp__memory-supabase__search_memories "[keywords php/laravel]" mcp__wikijs__search_pages "[framework] best practices" mcp__context7__get-library-docs para documentação actualizada ``` ### 2. Quality Gate 70+ - Funções < 50 linhas - Classes < 500 linhas - Cyclomatic complexity < 10 - PHPDoc em todas as funções públicas - Type hints em parâmetros e retornos ### 3. Assinatura Obrigatória ```php 'Activo', Status::Inactive => 'Inactivo', }; // Named arguments $this->service->create( name: $name, price: $price ); ``` ### PSR Standards - **PSR-1**: Basic Coding Standard - **PSR-4**: Autoloading - **PSR-12**: Extended Coding Style - **PSR-7**: HTTP Message Interface - **PSR-15**: HTTP Handlers ## Segurança (OBRIGATÓRIO) ```php // SQL - SEMPRE prepared statements $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$id]); // Input validation $email = filter_var($input, FILTER_VALIDATE_EMAIL); // Output escaping echo htmlspecialchars($output, ENT_QUOTES, 'UTF-8'); // Password hashing $hash = password_hash($password, PASSWORD_ARGON2ID); // CSRF em forms ``` ## Padrão Laravel ### Controller ```php productService->paginate(); return ProductResource::collection($products)->response(); } public function store(StoreProductRequest $request): JsonResponse { $product = $this->productService->create($request->validated()); return (new ProductResource($product)) ->response() ->setStatusCode(201); } } ``` ### Service ```php repository->paginate($filters); } public function create(array $data): Product { return $this->repository->create($data); } } ``` ### Repository ```php when($filters['category'] ?? null, fn($q, $cat) => $q->where('category_id', $cat)) ->when($filters['active'] ?? null, fn($q, $active) => $q->where('active', $active)) ->orderBy('created_at', 'desc') ->paginate($filters['per_page'] ?? 15); } public function create(array $data): Product { return Product::create($data); } } ``` ## Debugging PHP ### Xdebug ```php // php.ini zend_extension=xdebug.so xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=127.0.0.1 xdebug.client_port=9003 ``` ### Logging ```php // Monolog exemplo use Monolog\Logger; use Monolog\Handler\StreamHandler; $log = new Logger('app'); $log->pushHandler(new StreamHandler('logs/app.log', Logger::DEBUG)); $log->info('User logged in', ['user_id' => $userId]); $log->error('Database error', ['exception' => $e->getMessage()]); ``` ### Profiling ```bash # Com Blackfire blackfire run php script.php # Com Xhprof php -d extension=xhprof.so script.php ``` ## Testes Unitários ### PHPUnit ```php service = new ProductService( new InMemoryProductRepository() ); } public function test_create_product(): void { $product = $this->service->create([ 'name' => 'Test Product', 'price' => 99.99 ]); $this->assertInstanceOf(Product::class, $product); $this->assertEquals('Test Product', $product->name); } } ``` ### Pest (alternativa moderna) ```php create([ 'name' => 'Test', 'price' => 99.99 ]); expect($product) ->toBeInstanceOf(Product::class) ->name->toBe('Test'); }); ``` ## Checklist Entrega - [ ] Assinatura Descomplicar® em todos os ficheiros - [ ] php -l sem erros - [ ] PHPDoc em funções públicas - [ ] Type hints completos - [ ] PSR-12 compliant - [ ] Segurança validada (injection, XSS) - [ ] Se API: documentação endpoints - [ ] Testes unitários (cobertura >70%) --- ## Datasets Dify (Consulta Obrigatória) Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes datasets via MCP: | Dataset | ID | Prioridade | |---------|----|-----------:| | **TI (Tecnologia da Informação)** | `7f63ec0c-6321-488c-b107-980140199850` | 1 | | **Desenvolvimento de Software** | `e7c7decc-0ded-4351-ab14-b110b3c38ec9` | 1 | | **Wordpress** | `9da0b2b9-5051-4b99-b9f6-20bf35067092` | 2 | | **PerfexCRM** | `43354eb6-f0b2-40cc-aa53-44e375ab347c` | 3 | ### Como Consultar ```javascript # PRIMARIO: NotebookLM (Gemini 2.5 RAG) # mcp__notebooklm__notebook_query({notebook_id: "2876d1fe-5cea-4d98-8140-b0e1a81c6bc4", query: ""}) // Claude Code # mcp__notebooklm__notebook_query({notebook_id: "73102308-70ef-403e-9be9-eae0cfc62d55", query: ""}) // Desenvolvimento de MCPs # mcp__notebooklm__notebook_query({notebook_id: "57d9c6c9-48ba-4d83-8f71-cc890f348a53", query: ""}) // AI Code Editors # mcp__notebooklm__notebook_query({notebook_id: "24947ffa-0019-448a-a340-2f4a275d2eb1", query: ""}) // Programacao # mcp__notebooklm__notebook_query({notebook_id: "ebee9fe1-78fd-4f85-8938-f19f3ea32131", query: ""}) // Obsidian + Claude # FALLBACK: Dify KB (se NotebookLM insuficiente) // Pesquisar padrões Laravel mcp__dify-kb__dify_kb_retrieve_segments({ dataset_id: "e7c7decc-0ded-4351-ab14-b110b3c38ec9", query: "laravel service repository pattern" }) // APIs e autenticação mcp__dify-kb__dify_kb_retrieve_segments({ dataset_id: "7f63ec0c-6321-488c-b107-980140199850", query: "api rest jwt sanctum" }) // Desenvolvimento Perfex mcp__dify-kb__dify_kb_retrieve_segments({ dataset_id: "43354eb6-f0b2-40cc-aa53-44e375ab347c", query: "module development hooks" }) ``` ### Quando Consultar - Implementar padrões de arquitectura - Desenvolver APIs RESTful - Integrar sistemas de autenticação - Criar módulos Perfex CRM - Refactorizar código legacy --- **Versão**: 1.0.0 | **Autor**: Descomplicar®