Code Standards
Overview
Coding standards and best practices for Smart Academic Hub.
PHP (Backend)
PSR Standards
Follow PSR-12 coding style standard.
Laravel Conventions
- Use Eloquent for database operations
- Follow Laravel naming conventions
- Use Form Requests for validation
- Use Resources for API responses
Example
class StudentController extends Controller
{
public function index(Request $request)
{
$students = Student::query()
->when($request->search, function ($query, $search) {
$query->where('name', 'like', "%{$search}%");
})
->paginate(15);
return StudentResource::collection($students);
}
}
TypeScript (Frontend)
Vue 3 Composition API
<script setup lang="ts">
import { ref, computed } from 'vue';
interface Student {
id: number;
name: string;
}
const students = ref<Student[]>([]);
const searchQuery = ref('');
const filteredStudents = computed(() =>
students.value.filter(s =>
s.name.toLowerCase().includes(searchQuery.value.toLowerCase())
)
);
</script>
Naming Conventions
- Use PascalCase for components
- Use camelCase for variables and functions
- Use UPPER_CASE for constants
- Use kebab-case for file names
Code Quality
Linting
Backend:
./vendor/bin/phpcs
./vendor/bin/phpstan analyse
Frontend:
npm run lint
npm run type-check
Formatting
Backend:
./vendor/bin/php-cs-fixer fix
Frontend:
npm run format
Testing
Unit Tests
Test individual classes and methods:
test('student can be created', function () {
$student = Student::factory()->create();
expect($student)->toBeInstanceOf(Student::class);
});
Feature Tests
Test complete features:
test('can retrieve students', function () {
Student::factory(3)->create();
$response = $this->getJson('/api/v1/students');
$response->assertOk()
->assertJsonCount(3, 'data');
});
Documentation
- Add PHPDoc to all methods
- Document complex logic
- Update README when needed
- Keep API docs current
Git Practices
- Write clear commit messages
- Keep commits atomic
- Use conventional commits format
- Rebase before merging
- Review your own PR first
Security
- Validate all inputs
- Use parameterized queries
- Implement CSRF protection
- Follow least privilege principle
- Keep dependencies updated