nddcoder / rest
The Rest Framework.
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 3
Forks: 0
Open Issues: 0
Language:Shell
Type:project
Requires
- php: ^8.0
- nddcoder/rest-framework: ^1.3.1
This package is auto-updated.
Last update: 2024-10-29 06:12:11 UTC
README
Rest Framework - PHP Framework for ReactPHP Library
Docs
Installation
Server Requirements
The Rest framework has a few system requirements.
- PHP >= 7.4
- BCMath PHP Extension
- Ctype PHP Extension
- Fileinfo PHP Extension
- JSON PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PDO PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
Installing Rest
Rest utilizes Composer to manage its dependencies. So, before using Rest, make sure you have Composer installed on your machine.
Install Rest by issuing the Composer create-project
command in your terminal:
composer create-project --prefer-dist nddcoder/rest blog
Local Development Server
Just run index.php
file
php index.php
Or, if you have nodemon installed, you can have auto reload feature by using nodemon
nodemon index.php
Deploy
Using Docker
Just build image based on project's Dockerfile
docker build -t <image_name>:<image_tag> .
docker run -d \
-p 8080:8080 \
-e APP_PORT="0.0.0.0:8080" \
<image_name>:<image_tag>
Using Supervisor
[program:app-name]
process_name=%(program_name)s_%(process_num)02d
command=php /paht/to/project/index.php
autostart=true
autorestart=true
Usage
Router
Rest using Fast Route for routing. Application routes can be register in app/Router.php
.
class Router extends BaseRouter { protected function register(RouteCollector $routes): void { $routes->get('/', HomeController::class); //using invokeable controller $routes->get('/home', [HomeController::class, 'home']); $routes->get('/hello/{name}', [HomeController::class, 'hello']); /* $routes->post(...) $routes->put(...) $routes->delete(...) */ } }
Controller
The first parameter of controller method always is ServerRequestInterface
, any route params will following this.
class HomeController { public function __invoke(ServerRequestInterface $request) { $frameworkVersion = Application::VERSION; return view('home.twig', compact('frameworkVersion')); } public function home() { return response()->redirect('/'); } public function hello(ServerRequestInterface $request, $name) { return "Hello $name"; } }
Dependency Injection
Bind class to container
Application::getInstance() ->onBoot(function (Application $app) { $app->bind(ProductServiceInterface::class, fn($app) => new ProductServiceImpl()); });
Singleton
To make a class is singleton, you can make class implemnt Singleton
interface or bind to container using singleton
method
use Rest\Contracts\Singleton; class SlackService extends Singleton { } //or Application::getInstance() ->onBoot(function (Application $app) { $app->singleton(SlackService::class, SlackService::class); });
Resolve an instance from container
Inject dependencies in __construct
function
class ProductController { protected ProductServiceInterface $productService; public function __construct(ProductServiceInterface $service) { $this->productService = $service; } }
Using app
helper
Inject dependencies in __construct
function
class ProductController { public function __construct() { $this->productService = app(ProductServiceInterface::class); //or $this->productService = app()->make(ProductServiceInterface::class); } }
Helpers
app
: return Application instance or resolve an instance from container
$application = app(); //return Application instance $classInstance = app(ClassName::class); //ClassName instance
view
: return ViewResponse
instance. Accept view name and optional data need pass to view
class ProductController { public function index() { $products = [ //... ]; return view('products.index', [ 'products' => $products ]); } }
response
: return Response
instance, use to build response
class ProductController { public function index() { $products = [ //... ]; return response()->json([ 'data' => $products ]); } }
env
: get enviroment vairable from $_ENV
. Rest using vlucas/phpdotenv
for load env variables from .env
file.
$debug = env('APP_DEBUG') == 'true';
dd
: var_dump and die
variable for debugging.
dd($var1, $var2, $var3);
abort
: intermediately return http response. Accept status code
and message
abort(500); abort(403, 'Permission Denied');
abort_if
: abort
based on $condition
abort_if($condition, $status, $messagge);
abort_unless
: reversed side of abort_if
abort_unless($condition, $status, $messagge);
logger
: log a string or an Throwable
instance to console
logger('Error occurred'); logger($exeption);