This guide will help you create a REST API using KumbiaPHP and Workerman PHP, connected to a PostgreSQL database. We will cover the following operations:
- Querying all data in the
users
table (fields:username
andemail
). - Updating the email based on
username
. - Deleting data based on
username
.
1. Install KumbiaPHP
Start by setting up a new KumbiaPHP project:
composer create-project kumbia/kumbia my-project
cd my-project
2. Configure PostgreSQL Connection
Configure the database connection by editing the config/database.php
file. Replace the default configuration with your PostgreSQL credentials:
<?php
return [
'default' => 'pgsql',
'pgsql' => [
'dsn' => 'pgsql:host=localhost;port=5432;dbname=your_database_name',
'username' => 'your_username',
'password' => 'your_password',
'options' => [],
],
];
3. Create the User
Model
Create a model for the users
table. Create the file app/models/User.php
:
<?php
class User extends ActiveRecord {
public function initialize() {
// Optional: Add validation or other initialization code
}
}
4. Create the REST API Controller
Create a controller to handle the API endpoints. Create the file app/controllers/ApiController.php
:
<?php
class ApiController extends AppController {
public function initialize() {
View::select(null, null); // Disable view rendering
$this->response->setContentType('application/json');
}
// 1. Query all data in the users table
public function users() {
$users = User::all();
echo json_encode($users->toArray(['username', 'email']));
}
// 2. Update email based on username
public function update_email($username) {
$user = User::find_first("username = '$username'");
if ($user) {
$email = Input::request('email');
if ($email) {
$user->email = $email;
if ($user->save()) {
echo json_encode(['message' => 'Email updated successfully']);
}
} else {
echo json_encode(['error' => 'Email is required']);
}
} else {
echo json_encode(['error' => 'User not found']);
}
}
// 3. Delete data based on username
public function delete_user($username) {
$user = User::find_first("username = '$username'");
if ($user) {
if ($user->delete()) {
echo json_encode(['message' => 'User deleted successfully']);
}
} else {
echo json_encode(['error' => 'User not found']);
}
}
}
5. Define Routes
The routes are defined in the config/routes.php
file. Add the following routes:
Router::connect('/api/users', 'api@users');
Router::connect('/api/update-email/{username}', 'api@update_email');
Router::connect('/api/delete-user/{username}', 'api@delete_user');
6. Run the Application with Workerman
To run the KumbiaPHP application using Workerman, create a start.php
script:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8787');
$worker->count = 4;
$worker->onMessage = function(TcpConnection $connection, $data) {
ob_start();
require_once __DIR__ . '/index.php';
$output = ob_get_clean();
$connection->send($output);
};
Worker::runAll();
Start the Workerman server with the following command:
php start.php start
7. Test the API
- Query all users: Send a GET request to
http://localhost:8787/api/users
. - Update email: Send a POST request to
http://localhost:8787/api/update-email/{username}
with the following JSON body:
{
"email": "[email protected]"
}
- Delete user: Send a DELETE request to
http://localhost:8787/api/delete-user/{username}
.
This setup provides a basic REST API using KumbiaPHP and Workerman PHP connected to PostgreSQL. You can expand the functionality as needed for your project.
Leave a Reply