Download the PHP package danidoble/klein without Composer
On this page you can find all versions of the php package danidoble/klein. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download danidoble/klein
More information about danidoble/klein
Files in danidoble/klein
Package klein
Short Description A lightning fast router for PHP
License MIT
Homepage https://github.com/danidoble/klein
Informations about the package klein
Klein
Notes:
- This is a fork of klein/klein.php
- This project was upgraded to PHP ^8.1
klein is a fast & flexible router for PHP 8.1+
- Flexible regular expression routing (inspired by Sinatra)
- A set of boilerplate methods for rapidly building web apps
- Almost no overhead => 2500+ requests/second
Getting started
- PHP 8.1.x is required
- Install Klein using Composer (recommended) or manually
- Setup URL rewriting so that all requests are handled by index.php
- (Optional) Throw in some APC for good measure
Composer Installation
- Get Composer
- Require Klein with
php composer.phar require danidoble/klein
- Add the following to your application's main PHP file:
require 'vendor/autoload.php';
Example
Hello World - Obligatory hello world example
Example 1 - Respond to all requests
Example 2 - Named parameters
Example 3 - So RESTful
Example 4 - Sending objects / files
Example 5 - All together
Route namespaces
Included files are run in the scope of Klein ($klein
) so all Klein
methods/properties can be accessed with $this
Example file for: "controllers/projects.php"
Lazy services
Services can be stored lazily, meaning that they are only instantiated on first use.
Validators
To add a custom validator use addValidator($method, $callback)
You can validate parameters using is<$method>()
or not<$method>()
, e.g.
Or you can validate any string using the same flow..
Validation methods are chainable, and a custom exception message can be specified for if/when validation fails
Routing
[ match_type : param_name ]
Some examples
* // Match all request URIs
[i] // Match an integer
[i:id] // Match an integer as 'id'
[a:action] // Match alphanumeric characters as 'action'
[h:key] // Match hexadecimal characters as 'key'
[:action] // Match anything up to the next / or end of the URI as 'action'
[create|edit:action] // Match either 'create' or 'edit' as 'action'
[*] // Catch all (lazy)
[*:trailing] // Catch all as 'trailing' (lazy)
[**:trailing] // Catch all (possessive - will match the rest of the URI)
.[:format]? // Match an optional parameter 'format' - a / or . before the block is also optional
Some more complicated examples
/posts/[*:title][i:id] // Matches "/posts/this-is-a-title-123"
/output.[xml|json:format]? // Matches "/output", "output.xml", "output.json"
/[:controller]?/[:action]? // Matches the typical /controller/action format
Note - all routes that match the request URI are called - this allows you to incorporate complex conditional logic such as user authentication or view layouts. e.g. as a basic example, the following code will wrap other routes with a header and footer
Routes automatically match the entire request URI. If you need to match
only a part of the request URI or use a custom regular expression, use the @
operator. If you need to
negate a route, use the !
operator
Views
You can send properties or helpers to the view by assigning them
to the $service
object, or by using the second arg of $service->render()
myview.phtml
Views are compiled and run in the scope of $service
so all service methods can be accessed with $this
API
Below is a list of the public methods in the common classes you will most likely use. For a more formal source of class/method documentation, please see the PHPdoc generated documentation.
Unit Testing
Unit tests are a crucial part of developing a routing engine such as Klein. Added features or bug-fixes can have adverse effects that are hard to find without a lot of testing, hence the importance of unit testing.
This project uses PHPUnit as its unit testing framework.
The tests all live in /tests
and each test extends an abstract class
AbstractKleinTest
To test the project, simply run php composer.phar install --dev
to download
a common version of PHPUnit with composer and run the tests from the main
directory with ./vendor/bin/phpunit
Contributing
See the contributing guide for more info
More information
See the wiki for more information
Contributors
License
(MIT License)
Copyright (c) 2010 Chris O'Hara [email protected]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
All versions of klein with dependencies
ext-ctype Version *
ext-fileinfo Version *