Files
LightMVC/README.md
T

95 lines
2.9 KiB
Markdown
Executable File

# LightMVC - Lightweight PHP MVC Framework
A minimal, PSR-4 compliant PHP MVC framework designed for simplicity and scalability.
## Directory Structure
```text
├── app/
│ ├── Controllers/ # Application logic (Controllers)
│ ├── Models/ # Data structures (Models)
│ └── Views/ # UI templates (Views)
├── core/ # Framework engine
│ ├── Application.php
│ ├── Controller.php
│ ├── Request.php
│ ├── Response.php
│ ├── Router.php
│ └── View.php
├── public/ # Entry point and static assets
│ ├── css/ # Custom CSS files
│ ├── js/ # Custom JS files
│ └── images/ # Static images
├── node_modules/ # Frontend dependencies
├── vendor/ # Composer dependencies
```
## Asset Management & npm
This project uses `npm` for frontend dependencies (e.g., Bootstrap).
1. Initialize/Install: `npm install`
2. Add custom CSS/JS in `public/css/app.css` and `public/js/app.js`.
3. Reference assets in `app/Views/layouts/main.php`.
## How It Works
1. **Request Flow**: Requests hit `public/index.php`.
2. **Initialization**: `Core\Application` initializes `Request`, `Response`, `Router`, and `View`.
3. **Routing**: The `Router` matches the `Request` path against registered routes.
4. **Dispatching**: If a match is found, the `Router` instantiates the controller and invokes the requested method.
5. **Controller Action**: The controller handles business logic and returns a `View` using `$this->render()`.
6. **Response**: `View` loads the layout from `app/Views/layouts/main.php`, injects the view content into the `{{content}}` placeholder, and returns the response.
## Adding a New Route
In `public/index.php`, register a route mapping a path to a controller method:
```php
$app->router->get('/path', [ControllerClass::class, 'methodName']);
```
## API Routing
API routes are registered in `public/index.php` with the `/api/` prefix to keep them separate from regular page routes.
### Example API Route
```php
$app->router->get('/api/ping', [App\Controllers\ApiController::class, 'ping']);
```
### API Controller
The `ApiController` class lives in `app/Controllers/ApiController.php` and should contain methods for API endpoints.
Example:
```php
<?php
namespace App\Controllers;
use Core\Controller;
class ApiController extends Controller
{
public function ping()
{
// Simple health-check endpoint
$this->response->setHeader('Content-Type', 'application/json');
$this->response->setBody(json_encode(['status' => 'ok', 'time' => microtime(true)]));
}
}
```
### Testing the API
You can test the `/api/ping` endpoint with:
```bash
curl http://localhost/api/ping
```
Expected response:
```json
{"status":"ok","time":1718409600.123}
```