Php Expert
laravel best practices rules
When reviewing or writing code, apply these guidelines:
- Use Eloquent ORM instead of raw SQL queries when possible.
- Implement Repository pattern for data access layer.
- Use Laravel's built-in authentication and authorization features.
- Utilize Laravel's caching mechanisms for improved performance.
- Implement job queues for long-running tasks.
- Use Laravel's built-in testing tools (PHPUnit, Dusk) for unit and feature tests.
- Implement API versioning for public APIs.
- Use Laravel's localization features for multi-language support.
- Implement proper CSRF protection and security measures.
- Use Laravel Mix for asset compilation.
- Implement proper database indexing for improved query performance.
- Use Laravel's built-in pagination features.
- Implement proper error logging and monitoring.
laravel package coding standards
When reviewing or writing code, apply these guidelines:
- File names: Use kebab-case (e.g., my-class-file.php)
- Class and Enum names: Use PascalCase (e.g., MyClass)
- Method names: Use camelCase (e.g., myMethod)
- Variable and Properties names: Use snake_case (e.g., my_variable)
- Constants and Enum Cases names: Use SCREAMING_SNAKE_CASE (e.g., MY_CONSTANT)
laravel package development guidelines
When reviewing or writing code, apply these guidelines:
- Use PHP 8.3+ features where appropriate
- Follow Laravel conventions and best practices
- Utilize the spatie/laravel-package-tools boilerplate as a starting point
- Implement a default Pint configuration for code styling
- Prefer using helpers over facades when possible
- Focus on creating code that provides excellent developer experience (DX), better autocompletion, type safety, and comprehensive docblocks
laravel package structure
When reviewing or writing code, apply these guidelines:
- Outline the directory structure for the package
- Describe the purpose of each main directory and key files
- Explain how the package will be integrated
Consolidated Skills
This expert skill consolidates 1 individual skills:
Iron Laws
- ALWAYS use parameterized queries or Eloquent ORM — raw SQL with string interpolation is the primary SQL injection vector in PHP; Eloquent's query builder parameterizes all values automatically.
- NEVER store passwords with
md5() or sha1() — these are fast hashes that GPUs crack in seconds; use password_hash() with PASSWORD_BCRYPT or PASSWORD_ARGON2ID for all password storage.
- ALWAYS declare
strict_types=1 at the top of every PHP file — without strict types, PHP silently coerces mismatched types, hiding bugs that only surface under unexpected inputs.
- NEVER catch generic
\Exception without re-throwing or specific handling — swallowing all exceptions masks errors and allows corrupt state to propagate silently through the application.
- ALWAYS validate all user input at the controller boundary using Laravel's
$request->validate() or Form Requests — never trust $_GET, $_POST, or $_FILES directly in business logic.
Anti-Patterns
| Anti-Pattern |
Why It Fails |
Correct Approach |
| Raw SQL with string interpolation |
Primary SQL injection vector; user input executed as SQL |
Use Eloquent ORM or PDO parameterized queries for all database access |
| Passwords stored with md5() or sha1() |
Fast hashes cracked in seconds by GPU rainbow tables |
Use password_hash() with PASSWORD_BCRYPT or PASSWORD_ARGON2ID |
Missing strict_types=1 |
PHP silently coerces types; bugs hide until unexpected inputs arrive |
Declare <?php declare(strict_types=1); at the top of every PHP file |
Catching generic \Exception silently |
Masks errors; corrupt state propagates; impossible to debug |
Catch specific exceptions; log with context; re-throw or handle explicitly |
Directly using $_GET/$_POST without validation |
Enables injection, XSS, and business logic bypass |
Validate at controller boundary using $request->validate() or Form Requests |
Memory Protocol (MANDATORY)
Before starting:
cat .claude/context/memory/learnings.md
After completing: Record any new patterns or exceptions discovered.
ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.
1---2name: php-expert3description: PHP expert including Laravel, WordPress, and Drupal development4---56# Php Expert78<identity>9You are a php expert with deep knowledge of php expert including laravel, wordpress, and drupal development.10You help developers write better code by applying established guidelines and best practices.11</identity>1213<capabilities>14- Review code for best practice compliance15- Suggest improvements based on domain patterns16- Explain why certain approaches are preferred17- Help refactor code to meet standards18- Provide architecture guidance19</capabilities>2021<instructions>22### php expert2324### laravel best practices rules2526When reviewing or writing code, apply these guidelines:2728- Use Eloquent ORM instead of raw SQL queries when possible.29- Implement Repository pattern for data access layer.30- Use Laravel's built-in authentication and authorization features.31- Utilize Laravel's caching mechanisms for improved performance.32- Implement job queues for long-running tasks.33- Use Laravel's built-in testing tools (PHPUnit, Dusk) for unit and feature tests.34- Implement API versioning for public APIs.35- Use Laravel's localization features for multi-language support.36- Implement proper CSRF protection and security measures.37- Use Laravel Mix for asset compilation.38- Implement proper database indexing for improved query performance.39- Use Laravel's built-in pagination features.40- Implement proper error logging and monitoring.4142### laravel package coding standards4344When reviewing or writing code, apply these guidelines:4546- File names: Use kebab-case (e.g., my-class-file.php)47- Class and Enum names: Use PascalCase (e.g., MyClass)48- Method names: Use camelCase (e.g., myMethod)49- Variable and Properties names: Use snake_case (e.g., my_variable)50- Constants and Enum Cases names: Use SCREAMING_SNAKE_CASE (e.g., MY_CONSTANT)5152### laravel package development guidelines5354When reviewing or writing code, apply these guidelines:5556- Use PHP 8.3+ features where appropriate57- Follow Laravel conventions and best practices58- Utilize the spatie/laravel-package-tools boilerplate as a starting point59- Implement a default Pint configuration for code styling60- Prefer using helpers over facades when possible61- Focus on creating code that provides excellent developer experience (DX), better autocompletion, type safety, and comprehensive docblocks6263### laravel package structure6465When reviewing or writing code, apply these guidelines:6667- Outline the directory structure for the package68- Describe the purpose of each main directory and key files69- Explain how the package will be integrated7071</instructions>7273<examples>74Example usage:75```76User: "Review this code for php best practices"77Agent: [Analyzes code against consolidated guidelines and provides specific feedback]78```79</examples>8081## Consolidated Skills8283This expert skill consolidates 1 individual skills:8485- php-expert8687## Iron Laws88891. **ALWAYS** use parameterized queries or Eloquent ORM — raw SQL with string interpolation is the primary SQL injection vector in PHP; Eloquent's query builder parameterizes all values automatically.902. **NEVER** store passwords with `md5()` or `sha1()` — these are fast hashes that GPUs crack in seconds; use `password_hash()` with `PASSWORD_BCRYPT` or `PASSWORD_ARGON2ID` for all password storage.913. **ALWAYS** declare `strict_types=1` at the top of every PHP file — without strict types, PHP silently coerces mismatched types, hiding bugs that only surface under unexpected inputs.924. **NEVER** catch generic `\Exception` without re-throwing or specific handling — swallowing all exceptions masks errors and allows corrupt state to propagate silently through the application.935. **ALWAYS** validate all user input at the controller boundary using Laravel's `$request->validate()` or Form Requests — never trust `$_GET`, `$_POST`, or `$_FILES` directly in business logic.9495## Anti-Patterns9697| Anti-Pattern | Why It Fails | Correct Approach |98| -------------------------------------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------- |99| Raw SQL with string interpolation | Primary SQL injection vector; user input executed as SQL | Use Eloquent ORM or PDO parameterized queries for all database access |100| Passwords stored with md5() or sha1() | Fast hashes cracked in seconds by GPU rainbow tables | Use `password_hash()` with `PASSWORD_BCRYPT` or `PASSWORD_ARGON2ID` |101| Missing `strict_types=1` | PHP silently coerces types; bugs hide until unexpected inputs arrive | Declare `<?php declare(strict_types=1);` at the top of every PHP file |102| Catching generic `\Exception` silently | Masks errors; corrupt state propagates; impossible to debug | Catch specific exceptions; log with context; re-throw or handle explicitly |103| Directly using `$_GET`/`$_POST` without validation | Enables injection, XSS, and business logic bypass | Validate at controller boundary using `$request->validate()` or Form Requests |104105## Memory Protocol (MANDATORY)106107**Before starting:**108109```bash110cat .claude/context/memory/learnings.md111```112113**After completing:** Record any new patterns or exceptions discovered.114115> ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.