Simple, Elegant, Powerful
Discover the simplicity of BowPHP with concrete code examples
- Routes
- Controller
- Database
- Middleware
- Validation
- Responses
$app->get('/hello/{name}', function($name) {
return "Hello, $name!";
});
$app->post('/users', [UserController::class, 'store']);
$app->prefix('api', function() use ($app) {
$app->get('/posts', [PostController::class, 'index']);
$app->put('/posts/{id}', [PostController::class, 'update']);
$app->delete('/posts/{id}', [PostController::class, 'destroy']);
});
namespace App\Controllers;
use Bow\Http\Request;
use Bow\Http\Response;
use App\Models\User;
class UserController
{
public function store(Request $request): Response
{
$request->validate([
'email' => 'required|email|unique:users',
'name' => 'required|min:3|max:255',
'password' => 'required|min:8'
]);
$user = User::create([
'name' => $request->get('name'),
'email' => $request->get('email'),
'password' => password_hash($request->get('password'), PASSWORD_DEFAULT)
]);
$user->persist();
return response()->json([
'message' => 'Utilisateur créé avec succès',
'user' => $user
], 201);
}
}
namespace App\Models;
use Bow\Database\Barry\Model;
class User extends Model
{
protected $hidden = ['password'];
}
// Utilisation dans un contrôleur
$users = User::where('active', true)
->orderBy('created_at', 'desc')
->take(10)
->get();
$user = User::find(1);
$user->update(['name' => 'John Doe']);
// Relations
$user->posts()->where('published', true)->get();
namespace App\Middleware;
use Bow\Http\Request;
class AuthMiddleware
{
public function process(Request $request, callable $next)
{
if (!auth()->check()) {
if ($request->wantsJson()) {
return response()->json([
'message' => 'Non authentifié'
], 401);
}
return redirect('/login')
->withFlash('error', 'Veuillez vous connecter');
}
return $next($request);
}
}
// Application dans routes/app.php
$router->middleware('auth')->prefix('/', function() use ($router) {
$router->get('/dashboard', [DashboardController::class, 'index']);
$router->get('/profile', [ProfileController::class, 'show']);
});
// Validation simple
$request->validate([
'email' => 'required|email',
'age' => 'required|numeric|min:18',
'website' => 'url'
]);
// Validation personnalisée
$validation = validator($request->all(), [
'username' => 'required|alpha_dash|min:3|max:20',
'password' => 'required|min:8|confirmed',
'terms' => 'accepted'
]);
if ($validation->fails()) {
return response()->json([
'errors' => $validation->getErrors()
], 422);
}
// Règles disponibles: required, email, numeric, min, max,
// alpha, alpha_dash, url, ip, date, unique, exists, etc.
// JSON
return response()->json(['message' => 'Success'], 200);
// Vue
return view('welcome', ['name' => 'John']);
// Redirection
return redirect('/dashboard')
->withFlash('success', 'Opération réussie');
// Téléchargement
return response()->download('/path/to/file.pdf');
// Réponse personnalisée
return response('Contenu', 200)
->withHeader('Content-Type', 'text/plain')
->withCookie('name', 'value', 3600);
Why choose BowPHP?
A modern PHP framework that combines simplicity and power to accelerate your development
S2R
Simple, Fast and Robust. Focus on your project without worrying about complexity. BowPHP offers a clear and intuitive architecture that lets you develop quickly while keeping your code clean and maintainable.
ORM
An extremely simple ORM named Barry. Interact with your database in an elegant and expressive way. Barry simplifies CRUD operations and relationships between models, making data management more natural and productive.
Extensible
Infinitely customizable structure. Plugin support and reusable components. BowPHP adapts to your specific needs thanks to its modular architecture and package system, letting you extend functionality to fit your requirements.
Reactjs / Vuejs
By default, Bow ships with React and Vue presets. Build modern, reactive user interfaces with your favorite JavaScript frameworks. Native integration makes it easy to develop performant, scalable full-stack web applications.



