Web Services: Slim Framework + Eloquent(Laravel)
Setting up the Restful API is easy with Slim Framework & Eloquent(Laravel). Here are the steps:
- Install required components via composer – Slim Framework + Eloquent(Laravel)
- Create a database called
web_services
and createusers
table. - Setting up Eloquent
- Setting up Routes
- Final Touch

Install the necessary components using composer – create a composer.json
and save it in a working directory and run composer install
.
{ "name": "Web Services", "require": { "php": ">=5.3.0", "slim/slim": "2.*", "slim/views": "0.1.*", "illuminate/database": "5.0.*", "illuminate/events": "5.0.*" }, "autoload": { "classmap": [ "models" ] } }
We’re creating a simple web services for Users – Simple CRUD. Create a database called web_services
and run the following SQL statement to create user
table.
CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `phone` varchar(45) DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Next, setting up the Eloquent. Create a database.php
in config
folder(Please create this folder in the working directory) folder.
$database = [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'web_services', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]; use IlluminateDatabaseCapsuleManager as Capsule; $capsule = new Capsule; $capsule->addConnection($database); // Set the event dispatcher used by Eloquent models... (optional) use IlluminateEventsDispatcher; use IlluminateContainerContainer; $capsule->setEventDispatcher(new Dispatcher(new Container)); // Make this Capsule instance available globally via static methods... (optional) $capsule->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher()) $capsule->bootEloquent();
Once we’re done with Eloquent, next we going to set up the routes for Users CRUD operations. Save your time, copy & paste the following codes and save it in config/routes.php
.
<?php $app->get('/api/users', function () { echo User::all()->toJson(); }); $app->get('/api/users/:id', function($id) { try { echo User::find($id)->toJson(); } catch (Exception $e) { echo '{"error":{"text":'. 'Unable to get the web service. ' . $e->getMessage() .'}}'; } }); $app->get('/api/users/search/:query', function($query) { echo User::where('name', '=', $query)->get()->toJson(); }); $app->post('/api/users/add', function() use ($app) { try { $user = new User; $user->name = $app->request()->post('name'); $user->phone = $app->request()->post('phone'); $user->email = $app->request()->post('email'); if($user->save()) { echo '{"message":"Successfully add new user"}'; } else { echo '{"message":"Failed to add new user"}'; } } catch (Exception $e) { echo '{"error":{"text":'. 'Unable to get the web service. ' . $e->getMessage() .'}}'; } }); $app->put('/api/users/update/:id', function($id) use ($app) { try { $user = User::find($id); $user->name = $app->request()->post('name'); $user->phone = $app->request()->post('phone'); $user->email = $app->request()->post('email'); if($user->save()) { echo '{"message":"Successfully update user info"}'; } else { echo '{"message":"Failed update user info"}'; } } catch (Exception $e) { echo '{"error":{"text":'. 'Unable to get the web service. ' . $e->getMessage() .'}}'; } }); $app->delete('/api/users/:id', function($id) { $user = User::find($id); if($user->delete()) { echo '{"message":"Successfully delete user"}'; } else { echo '{"message":"Failed to delete user"}'; } });
OK, here the final touch! 2 things to do, one the index.php
and the other one is .htaccess
. Here the index.php
. Please take note, we require the header("Access-Control-Allow-Origin: *");
, to ensured that we can access this Restful API from other domains. There might be security issues. Comments are welcomed.
<?php try { header("Access-Control-Allow-Origin: *"); require 'vendor/autoload.php'; require 'config/database.php'; require 'config/initialize.php'; } catch (Exception $e) { echo '{"error":{"text":'. 'Unable to start up the web service. ' . $e->getMessage() .'}}'; }
The .htaccess
.
RewriteEngine On # Some hosts may require you to use the `RewriteBase` directive. # If you need to use the `RewriteBase` directive, it should be the # absolute physical path to the directory that contains this htaccess file. # # RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]
Source code available at: Web Service(Restful API)
I Have 3 demo available:
would be much more nicer if you can make use the .env and artisan migration just like laravel. The development would be much fun
Memang manthop.
Terbaik