https://github.com/4d47/php-http-resource
https://github.com/4d47/php-http-resource
Last synced: over 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/4d47/php-http-resource
- Owner: 4d47
- Created: 2014-01-07T02:25:43.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2015-03-07T14:57:36.000Z (over 11 years ago)
- Last Synced: 2025-03-06T08:58:14.826Z (over 1 year ago)
- Language: PHP
- Size: 441 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# \Http\Resource
> **The PHP paradox**: PHP is a web framework. Any attempt at using PHP will result in building a web framework.
## Install
```bash
composer require 4d47/http-resource:3.*
```
## Usage
```php
namespace App;
# First you define a 'class' of URLs.
# That's a set of documents that share the same structure of data and operations.
# Instances of the class will represents a specific URL.
class Product extends \Http\Resource {
# The `$path` static variable holds the URL pattern that this resource
# match. When matched, the instance will have properties assigned with
# the pattern variables. Parenthesis can be used for optional variables,
# colon denote a variable and a star matches anything. eg: `/foo((/:bar)/*)`
public static $path = '/products/:name';
# Then you implement HTTP methods, GET, POST, PUT, etc
# to update the instance resource representation.
# Server errors (5xx), client errors (4xx) and redirects (3xx) are sent by throwing
# [http exceptions](http://github.com/4d47/php-http-exceptions).
public function get() {
if ($this->name == 'bazam')
throw new \Http\NotFound();
$this->price = 12;
}
# Implement any other methods you like
public function __toString() {
return sprintf("%s, %d$$", ucfirst($this->name), $this->price);
}
}
```
Default `render` use scripts located in the `views` directory and named after the class name. Eg. `views/app/product.php`. The instance properties are `extract` before being included. `$this` reference the resource itself, it can be used to assign properties or call helpers methods. `link` is used to reference back resource path.
```php
= $this ?>
```
If there is a file named `layout.php` in the views subpath, the first one will be used.
The `$content` variable will hold the result of the first view and `$this` will also be available.
Eg. using `views/layout.php`.
```php
= $this->title ?>
= $content ?>
```
Finally you bootstrap everything in your `index.php` by handling
the list of your resources.
```php
\Http\Resource::handle(['App\Product']);
```
See [4d47/php-start](https://github.com/4d47/php-start/) for a basic layout of the code.