https://github.com/sinri/clover
An MVC Framework for Restful Web Project in PHP. Deprecated. Use Enoch instead.
https://github.com/sinri/clover
Last synced: 11 months ago
JSON representation
An MVC Framework for Restful Web Project in PHP. Deprecated. Use Enoch instead.
- Host: GitHub
- URL: https://github.com/sinri/clover
- Owner: sinri
- License: mit
- Created: 2015-12-11T09:14:47.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2017-03-21T07:30:07.000Z (about 9 years ago)
- Last Synced: 2025-07-04T01:04:30.113Z (11 months ago)
- Language: PHP
- Homepage:
- Size: 168 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Clover
An MVC Framework for Restful Web Project in PHP, under MIT License, now version 0.2.
## Introduction
Clover is designed after CodeIgniter but much more simpler. It provides Restful style HTTP request process resolution.
Clover uses Model-View-Controller (MVC) architecture. Clover would parse all requests to controller, method and its parameters, and call the very method of controller with those parameters to response.
In short, URL `clover.ng/CONTROLLER/METHOD/Param1/Param2` would be processed by `CONTROLLER()->METHOD(Param1,Param2)`. Of course, URL `clover.ng/CONTROLLER/METHOD/Param1`, `clover.ng/CONTROLLER/METHOD`, and `clover.ng/CONTROLLER` are also available if controller was designed to support.
For `GET` request, Clover would parse the query string. For `POST`, Clover accept encoded url data and form data format by default, and also request with JSON data as HTTP request body when declare `application/json` as the value of Header `Content-Type`.
## Install
Clover is based on rewrite modual of Apache. (Nginx is also supported, in theory.) Create and edit `.htaccess` file in the root directory with the following:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
# For Apache2
## Usage
Clover supports processing web requests. As well, Clover could be used in CLI mode since version 0.2, as Yii Framework supports.
Just fill the controller classes in `controller` directory, model classes in `model` directory, and view html files in `view` directory. For command line use, fill commands in `command` directory.
Import Clover file into `index.php` for web request, or `CloverCLI.php` for CLI:
require __DIR__.'/core/Clover.php';
In `index.php`, first set the root path:
Clover::setRootPath($path_of_root);
For some strange purposes, Clover supports customization on MVC directories, just modify the source code under MIT License.
Finally, start Clover:
Clover::start();
### Controller
Create an php file with a class inside. File name should be the same with the class inside. The class should extend class `CloverController`.
The methods of the class would be the method of the controller and `index` would be the default. The third element and the next ones of the url, if exist, would be the parameters of the method.
Use method `display($view_file,$assignment=array(),$isPart=false)` to display with certain view. The second parameter is an array to carry the assigned parameters to view. For example, if pass `array('K'=>'V')` as `$assignment`, you can use `` to display `V` in your response view. The third parameter accepts boolean value and FALSE by default to stop PHP script with this very function call. If TRUE were given, the PHP script would run continuely until the end of the code.
### Model
You can define model class in model directory in the php file with same name, which would be loaded automatically when called.
### View
For view, create html file in view directory. Within the html content, you can use PHP codes inside, as well as the assigned parameters.
### Command
Create an php file with a class inside. File name should be the same with the class inside. The class should extend class `CloverCommand`.
The methods of the class which named as `.+Action` would be treated as action to execute, and default as `defaultAction`. For parameter usage, use `--PARAM_NAME=PARAM_VALUE`.
You can override `beforeAction` and `afterAction` functions to realize the action procedure control.
## Clover Class Toolkits
The following are all static functions of Clover class.
### Get Query Method
function getQuery($name=null,$default=null)
Return the whole `$_GET` when `$name` is null. When `$name` is not null, try to return `$_GET[$name]` if it is set, or `$default` would be returned.
### Get Raw HTTP Request Method
function getRawRequestBody()
Return the raw body of the current HTTP request.
### Get Data Method
function getData($name=null,$default=null)
If request comes in standard HTTP format, return the whole `$_POST` when `$name` is null. When `$name` is not null, try to return `$_POST[$name]` if it is set, or `$default` would be returned.
If request comes in JSON Object format and `application/json` delared in `Content-Type` header, Clover would parse the HTTP request to JSON Object and get its property with the name given, or return `$default` when not set.
## P.S.
I think that, CI is in good design, but it is too heavy for simple project. I want make an environment to work with free feel, from both requirements and frameworks. In short, I do not want to learn too much about a tool and then trap into the tool. Using Clover, you can get the nearly same result with CI, but you can use all pure PHP function instead of the completely capsulized toolkit of CI. You like extension? Well, just develop them as you like. Clover is only a base framework.