sinevia / php-serverless
PHP Serverless
Requires
- dg/composer-cleaner: ^2.1
- illuminate/database: ^6.3
- jenssegers/blade: dev-master
- mrclay/jsmin-php: >=2.4.0
- phroute/phroute: >=v2.1.0
- sinevia/php-library-api: ^1.1
- sinevia/php-library-migrate: >=v1.3.0
- sinevia/php-library-registry: >=v2.8.0
- sinevia/php-library-serverless: >=v1.7.0
- sinevia/php-library-sqldb: >=v3.8.0
- sinevia/php-library-sqldb-cache: ^1.2
- sinevia/php-library-template: >=v1.4.0
- sinevia/php-library-uid: ^1.8
- sinevia/php-library-utils: >=v2.7.0
Requires (Dev)
- consolidation/robo: >=1.4.9
- sinevia/php-library-testify: ^1.6
README
The first and fully functional PHP framework built exclusively for serverless. Support for IBM Cloud Functions
FEATURES
- Easy to learn and start. All required is in this README file.
- Fully automated and extendable via RoboFile (learn more).
- Powerful and super fast router (learn more).
- Lean database library (learn more). Eloquent optional.
- Lean template engine (learn more). Blade optional.
- Lean testing framework (learn more). PhpUnit optional.
- Uses tested serverless deployment framework (learn more)
INSTALLATION
- Step 1
composer create-project --prefer-dist sinevia/php-serverless .
- Step 2
vendor/bin/robo init
AFTER INSTALLATION
- Delete the phpunit.xml file, if you are not going to use PHPUnit for testing
- Change the settings in /app/config (serverless function name, etc)
- Change the settings in /env.php (not required usually)
WORKFLOW
Four environments are specified and available out of the box - local, testing, staging, live.
- Local. All development is done on local - (local)
- Testing. Automatic tests are run in testing - (testing)
- Staging. For user and manual testing depoy to staging - (staging)
- Live. For real live usage deploy to live - (live)
DEVELOPMENT
To start working on the project run the built in PHP server:
php -S localhost:32222
or using the helper function
vendor/bin/robo serve
Then open in browser: http://localhost:32222/
or using the helper function
vendor/bin/robo open local
DATABASE
To run migrations for each environment:
vendor/bin/robo migrate local
vendor/bin/robo migrate staging
vendor/bin/robo migrate live
DEPLOYMENT
The deployment will run your tests, and will continue only if your tests are successful
To deploy to your staging function
vendor/bin/robo deploy staging
To deploy to your live function
vendor/bin/robo deploy live
HELPER FUNCTIONS
A RoboFile exists with automated functionality.
- Run database migrations on local
vendor/bin/robo migrate local
- Run database migrations on staging
vendor/bin/robo migrate local
- Run database migrations on live
vendor/bin/robo migrate live
- Serve the site for development
vendor/bin/robo serve
- Open local/dev url from terminal
vendor/bin/robo open local
- Open staging url from terminal
vendor/bin/robo open staging
- Open live url from terminal
vendor/bin/robo open live
- Deploy to staging
vendor/bin/robo deploy staging
- Deploy to live
vendor/bin/robo deploy live
TESTING
Two testing frameworks supported out of the box:
- Testify.php - very lean and straghtforward to work with (preferred, and preinstaled)
- PHPUnit - more mature, but heavy weight with many dependencies
To decide which modify the setting in the RoboFile.
Testing with Testify.php
Testify is a small PHP testing library with no extenal dependencies: https://github.com/BafS/Testify.php
Place your tests in /tests/test.php
To run the tests
php tests/test.php
or
vendor/bin/robo test
Testing with PHPUnit
PHPUnit is a huge PHP testing library. Beware it will come with lots of composer dependencies: https://phpunit.de/
To install the framework with all the dependencies
composer require --dev phpunit/phpunit
Place your settigs in /phpunit.xml. Place your tests in /tests
To run the tests
vendor/bin/phpunit
or
vendor/bin/robo test
SERVING STATIC FILES
Multiple options
Local CSS and JavaScript files are best to be served minified inline. Helper functions are added
<?php echo joinCss(['/css/main.css','/css/secondary.css']); ?>
Small images (i.e. favicon) serve inline as data.
<img src="<?php echo image2DataUri('/public/img/avatar.png'); ?>" />
To serve static files separately place them in the public directory.
/public/css/main.css
For remote static files use CDN, S3 or other storage.
FUNCTIONS
Functions are defined in file /app/functions.php. Feel free to change or remove.
basePath($path = '')
Returns the top most (root, base) path of the application
baseUrl($path = '')
Returns the top most (root, base) URL of the application
db()
Returns a database instance
env($key, $default = '')
Returns an env variable from OPEN WHISK
htmlFormatPriceWithCurrencySymbol($amount, $currency)
image2DataUri($imagePath)
Converts an image path to data URI
isGet
Checks if this is a GET request
isPost
Checks if this is a POST request
joinCss($styles, $options = [])
Joins multiple CSS files, and optionally minifies them
joinJs($scripts, $options = [])
Joins multiple JavaScript files, and optionally minifies them
redirect($url)
Redirects to the specified URL
req($name, $default = null, $functions = [])
Returns the requested $_REQUEST name-value pair if it exists
sess($name, $default = null, $functions = [], $options = [])
Returns the requested $_SESSION name-value pair if it exists
once($name, $default = null, $functions = [], $options = [])
Returns a once value if it exists in $_SESSION. After the value is returned, it is deleted
function reqOrSess($name, $default = null, $functions = [])
ui($view, $vars = array(), $options = array())
Renders a template from app/views. If no extension is specified .phtml is added
view($view, $data)
Renders a Blade template from /views. A /cache folder is required. If using Eloquent for data management this function will clash, delete it, or rename it i.e. to uiBlade($view, $data).
To use the view function you must install Blade:
composer require jenssegers/blade