OCEAN - RESTful - MVC - PHP Framework

OCEAN ist ein von mir entwickeltes PHP Framework. Es befindet sich noch in der Pre-Alpha-Version.

OCEAN On Github

Features

To do

  • Respone
  • Cache
  • Redirect
  • Composer integration

Wer mag kann sich OCEAN auf Github anschauen. Damit das Framework sauber läuft wird ein appache-vhost empfohlen.

Dokumentation

Einführung in OCEAN - PHP FRAMEWORK

Datenbank einrichten

Die Datenbank Konfigurationsdatei findet man im System Ordner. In diesem Ordner befindet sich database.php. Dort können Zugangsdaten für die Datenbank hinterlegt werden.

database.php

<?php

$GLOBALS['database'] = array(
	
	/*
	 * selected database
	 */
	'connected' => 'mysql', //ausgewählte db
	
	/**
	 * defined databases
	 */
	'connections' => array(
		
		/**
		 * mysql database
		 */
		'mysql' => array(
			
			'driver' => 'mysql', // keine mysqli unterstützung. Nur PDO
			'host' => 'localhost', // Hostname
			'database' => 'deineDB', // Datenbankname
			'username' => 'root', // Benutzer
			'password' => '', // Password
			
		),
		
	)
	
);

Routing

Deine Seiten und die dazugehörenden Controller kannst du in der routes.php eintragen. Diese liegt in dem System Ordner.

$GLOBALS['routes'] = array(
	
	
	/**
	 * Restful example
	 */	
	'userIndex' => array(
		'method' => 'get', //http method
		'path' => '/user',  //uri path
		'controller' => 'UserController.index', //your controller -> Klassname.method
	),
	'createUser' => array(
		'method' => 'post',
		'path' => '/user',
		'controller' => 'UserController.create',
	),
	'showUser' => array(
		'method' => 'get',
		'path' => '/user/:id',
		'controller' => 'UserController.show',
	),
	'updateUser' => array(
		'method' => 'put',
		'path' => '/user/:id',
		'controller' => 'UserController.update',
	),
	'deleteUser' => array(
		'method' => 'delete',
		'path' => '/user/:id',
		'controller' => 'UserController.delete',
	)
);

RESTful

Dir stehen folgende HTTP Methoden zur verfügung

  • get
  • post
  • put
  • patch
  • head

Bitte beachten:

Abgesehen von post und get müssen alle anderen Methoden getunnelt werden:

Beispiel

<form>
	<input name="_method" type="hidden" value="put">
</form>

Controller

Controller Klassen liegen im controller/ Ordner. Klassenname und Dateiname müssen gleich sein.

Beispiel: HomeController.php

<?php namespace Ocean;

class HomeController
{

	/**
	 * @path /
	 * http method get
	 */
	public function index()
	{
		/*
		 * your logic
		 */
		include 'views/page/home.php';
	}

}

Model

Die Model Klassen liegen im models/ Ordner. Hier gilt das gleiche wie bei den Controllers. Dateiname == Klassenname. Bei einem Model gibt es zwei relevante Eigenschaften.

  • ( protected ) $table
  • ( protected ) $schema

Nicht vergessen, dein Model mit der Model Klasse zu erweitern: DeinModel extends Model

Beispiel: User.php

<?php namespace Ocean;

class User extends Model
{
	
	/**
	 * tablename
	 */	
	protected $table = 'oc_user';
	
	/**
	 * fields
	 */	
	protected $schema = array(
		
		'id' => 'int(12) AUTO_INCREMENT PRIMARY KEY',
		'username' => 'varchar(255)',
		'message' => 'text'

	);
	
}

Vererbte Model Methoden und Eigenschaften

Deinem Model stehen ein paar nützliche Eigenschaften und Methoden zur verfügung. z.B Create ( Insert ), Read, Update, Delete ( CRUD ).

INSERT ( Row ) & CREATE ( Table )

<?php namespace Ocean;


class UserController
{

	/**
	 * post /user
	 * create new user
	 */
	public function create()
	{
		/**
		 * get post data from form with Request class
		 */
		$input = Request::only(array('username', 'message'));

		/**
		 * create instance of User
		 */
		$user = new User();
		
		/**
		 * create user table [if not exist]
		 */
		$user->create();
		
		/**
         * fill user attributes
         */
		$user->username = $input['username'];
		$user->message = $input['message'];

		/**
		 * insert new table with given attributes
		 */
		$user->insert();

		/**
		 *	Redirect back to user page
		 */
		header("Location: /user");

	}


}

READ

<?php namespace Ocean;


class UserController
{

	/**
	 * get /user/:id
	 * get specific user
	 */
	public function show($param)
	{
		/**
		 * get user id from param
		 */
		$userID = $param['id'];

		/**
		 * create instance of User
		 */
		$user = new User();

		/**
		 * get user with current id
		 */
		$user->where = 'id = '.$userID;
		
		/**
		 * get user object
		 */
		$currentUser = $user->find()[0]; //get first object

		/*
		 * load view
		 */
		include 'views/page/user-profile.php';

	}


}

UPDATE

<?php namespace Ocean;


class UserController
{

	/**
	 * put /user/:id
	 * update user
	 */
	public function update($param)
	{	

		/**
		 * get post data from form with Request class
		 */
		$input = Request::only(array('username', 'message'));

		/**
		 * get user id from param
		 */
		$userID = $param['id'];

		/**
		 * create instance of User
		 */
		$user = new User();

		/**
         * update user attributes
         */
		$user->username = $input['username'];
		$user->message = $input['message'];

		/**
		 * select user
		 */
		$user->where = 'id = '.$userID;

		/**
		 * update user
		 */
		$user->update();

		/**
		 *	Redirect back to user page
		 */
		header("Location: /user");
	}


}

DELETE

<?php namespace Ocean;


class UserController
{

	/**
	 * delete /user/:id
	 * delete user
	 */
	public function delete($param)
	{	
		/**
		 * get user id from param
		 */
		$userID = $param['id'];

		/**
		 * create instance of User
		 */
		$user = new User();

		/**
		 * select user
		 */
		$user->where = 'id = "'.$userID.'"';

		/**
		 * remove user
		 */
		$user->remove();

		/**
		 *	Redirect back to user page
		 */
		header("Location: /user");
	}


}

More…

Weitere Eigenschaften

  • where
  • limit
  • joins
  • auto. timestamps

Dokumentation wird noch erweitert…

Weitere Features/Klassen

  • system/core/Http/Token.php
  • system/core/Http/Session.php
  • system/core/Http/Cookie.php
  • system/core/Http/Request.php
  • system/core/Validator/Valid.php
  • system/core/Validator/ValidEntities.php