Skip to main content

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