- Notifications
You must be signed in to change notification settings - Fork8
👽 PHP web application using Inphinit framework
License
inphinit/inphinit
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- Installing
- Testing
- NGINX
- Folder structure
- Creating routes
- Grouping routes
- Route and URL patterns
- Documentation
Requirements:
- Currently supported PHP version:https://www.php.net/supported-versions.php.
- MinimalPHP 5.4 (backward compatibility is maintained for users with upgrade limitations).
- If you need a full-featured server for Windows or macOS, try: Wamp, Xampp, Laragon, EasyPHP, AMPPS, etc.
- (Optional) Intl PHP extension to use
Inphinit\Utility\Strings
class. - (Optional) COM PHP extension or cURL PHP extension to use
Inphinit\Filesystem\Size
class.
After installing PHP, you can install Inphinit using Composer or Git.
If you use composer, run the command (more details inhttps://getcomposer.org/doc/03-cli.md):
php composer.phar create-project inphinit/inphinit my-application
If you use composer global, run the command:
composer create-project inphinit/inphinit my-application
Installing using Git:
git clone --recurse-submodules https://github.com/inphinit/inphinit.git my-applicationcd my-application
After navigating to the folder you must execute the following command, if you want to usePHP built-in web server:
php -S localhost:5000 -t public index.php
And access in your browserhttp://localhost:5000/
If you want to experiment with a web server such as NGINX, you can use the following example to configure yournginx.conf
:
location / { root /home/foo/bar/my-application; # Redirect page errors to route system error_page 403 /index.php/RESERVED.INPHINIT-403.html; error_page 500 /index.php/RESERVED.INPHINIT-500.html; try_files /public$uri /index.php?$query_string; location = / { try_files $uri /index.php?$query_string; } location ~ /\. { try_files /index.php$uri /index.php?$query_string; } location ~ \.php$ { # Replace by your FPM or FastCGI fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; set $teeny_suffix ""; if ($uri != "/index.php") { set $teeny_suffix "/public"; } fastcgi_param SCRIPT_FILENAME $realpath_root$teeny_suffix$fastcgi_script_name; }}
Note: For FPM use
fastcgi_pass unix:/var/run/php/php<version>-fpm.sock
(replace<version>
by PHP version in your server)
├───.htaccess# Apache web server configuration for the application├───index.php# Only modify the values of existing constants, and only if necessary├───server# Shortcut to start the built-in web server on Linux and macOS├───server.bat# Shortcut to start the built-in web server on Windows├───web.config# IIS web server configuration for the application├───public/# This folder can hold static files or PHP scripts that run independently of the main application│ └───.htaccess# Apache web server configuration for additional PHP scripts and static files└───system/# Folder containing your application code ├───dev.php# Similar to main.php, but only used in development mode ├───errors.php# Should define error page behavior (e.g., 404 or 405 errors), allowing static files or views to be served ├───main.php# The main file for defining routes and events, available in both development and production modes ├───boot/# Contains settings for inphinit_autoload, similar to composer_autoload │ ├───importpackages.php# │ └───namespaces.php# ├───configs/# Contain varied configuration files, it is recommended that you do not version this folder │ ├───app.php# Don't add new keys, just change the values of existing ones if necessary │ └───debug.php# Don't add new keys, just change the values of existing ones if necessary ├───Controllers/# Must contain the classes that will be controllers used in the routes ├───storage/# ├───vendor/# Contain third-party packages and the framework └───views/# Should contain your views
In development mode, thesystem/dev.php
script will always be executed first, thensystem/main.php
will be executed, and if an error occurs, such as 404 or 405, the last script to be executed will besystem/errors.php
To create a new route, edit thesystem/main.php
file, if you want the route to only be available in development mode, then edit thesystem/dev.php
file.
The route system supportscontrollers,callables andanonymous functions, examples:
<?php// anonymous functions$app->action('GET','/closure',function () {return'Hello "closure"!';});functionfoobar() {return'Hello "function"!';}// callable function$app->action('GET','/function','foobar');// callable class static method (Note: autoload will include the file)$app->action('GET','/class-static-method', ['MyNameSpace\Foo\Bar','hello']);// callable class method$foo =newSample;$app->action('GET','/class-method', [$foo,'hello']);// do not add the Controllers prefix, the framework itself will add$app->action('GET','/controller','Boo\Bar::xyz');/** * Controller from `./system/Controllers/Boo/Bar.php`: * * <?php * namespace Controllers\Boo; * * class Bar { * public function xyz() { * ... * } * } */
The route grouping system is now much simpler, it is based on the complete URL or path, and you can use the*
wildcard character and also the same patterns available for routes, examples:
<?php/* * Routes will only be added if the path starts with /blog/ * * Samples: * * http://localhost:5000/blog/ * http://localhost:5000/blog/post * http://localhost:5000/blog/search */$app->scope('/blog/',function ($app,$params) {$app->action('GET','/',function () {... });$app->action('POST','/post',function () {... });$app->action('GET','/search',function () {... });});// Routes will only be added if you are accessing via HTTPS$app->scope('https://*',function ($app,$params) {...});// Routes will only be added if you are accessing via HTTP$app->scope('http://*',function ($app,$params) {...});// Routes will only be added if you are accessing mysite2.org host$app->scope('*://mysite2.org/',function ($app,$params) {...});// Routes will only be added if you are accessing a subdomain from main.org, like: site1.main.org$app->scope('*://*.main.org/',function ($app,$params) {...});// Using pattern to get the subdomain:$app->scope('*://<subdomain>.main.org/',function ($app,$params) {$subdomain =$params['subdomain'];...});// Using pattern to get path:$app->scope('*://*/users/<id:num>/<user>',function ($app,$params) {$id =$params['id'];$username =$params['user'];...});
See more examples in thesystem/dev.php
file
Type | Example | Description |
---|---|---|
alnum | $app->action('GET', '/baz/<video:alnum>', ...); | Only accepts parameters with alpha-numeric format and$params returns['video' => ...] |
alpha | $app->action('GET', '/foo/bar/<name:alpha>', ...); | Only accepts parameters with alpha format and$params returns['name' => ...] |
decimal | $app->action('GET', '/baz/<price:decimal>', ...); | Only accepts parameters with decimal format and$params returns['price' => ...] |
num | $app->action('GET', '/foo/<id:num>', ...); | Only accepts parameters with integer format and$params returns['id' => ...] |
nospace | $app->action('GET', '/foo/<nospace:nospace>', ...); | Accepts any characters expcet spaces, like white-spaces (%20 ), tabs (%0A ) and others (see about\S in regex) |
uuid | $app->action('GET', '/bar/<barcode:alnum>', ...); | Only accepts parameters with uuid format and$params returns['barcode' => ...] |
version | $app->action('GET', '/baz/<api:version>', ...); | Only accepts parameters withSemantic Versioning 2.0.0 (semversion) format and$params returns['api' => ...] |
It is possible to add or modify existing patterns using the$app->setPattern(name, regex)
method. Creating a new pattern:
<?phpuseInphinit\Viewing\View;$app->action('GET','/about/<lang:locale>',function ($params) {$lang =$params['lang'];...});$app->action('GET','/product/<id:customid>',function ($params) {$lang =$params['id'];...});$app->setPattern('locale','[a-z]{1,8}(\-[A-Z\d]{1,8})?');// examples: en, en-US, en-GB, pt-BR, pt$app->setPattern('customid','[A-Z]\d+');// examples: A0001, B002, J007
Modifying an existing pattern:
<?php// Replace semversion by <major>.<minor>.<revision>.<build>$app->setPattern('version','\d+\.\d+.\d+.\d+');// Replace semversion by <major>.<minor> (maybe it's interesting for web APIs)$app->setPattern('version','\d+\.\d+');
- English:https://inphinit.github.io/en/docs/
- Português: (em breve)
- API:https://inphinit.github.io/api/
The documentation is maintained in its ownGitHub repository.
About
👽 PHP web application using Inphinit framework
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.