Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/geggleto/collective
A slim 3 based skeleton project
https://github.com/geggleto/collective
Last synced: 5 days ago
JSON representation
A slim 3 based skeleton project
- Host: GitHub
- URL: https://github.com/geggleto/collective
- Owner: geggleto
- License: mit
- Created: 2015-12-21T16:02:18.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2015-12-23T19:15:43.000Z (almost 9 years ago)
- Last Synced: 2023-08-16T22:17:00.553Z (over 1 year ago)
- Language: PHP
- Homepage:
- Size: 88.9 KB
- Stars: 6
- Watchers: 5
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/geggleto/Collective.svg)](https://travis-ci.org/geggleto/Collective)
# Collective
Collective is a skeleton project based on Slim 3, and Twig.This project comes configured with:
- Symfony Console App
- Slim 3
- Extendable Container Aware Classes (Action, Middleware, Controller)
- Route Loading via config file
- Middleware loading via config file
- MonologMiddleware:
- Session
- Flash Messages
- Monolog
- Rate Limiting
Rendering:
- Json
- Twig [slim/twig-view]
- PHP [slim/php-view]# Install the Application
Run this command from the directory in which you want to install your new Collective/Slim Framework application.
```php
php composer.phar create-project geggleto/collective [my-app-name]
```Replace `[my-app-name]` with the desired directory name for your new application.
You'll want to:
- Point your virtual host document root to your new application's `public/` directory.
- Ensure `logs/` is web writable.## Config
`config/app.config` holds your Dependency Container Default Values.
To turn Twig Caching off:
```php
$container["config"]["cache_path"] = false
```
Or
```
"cache_path" => "../cache", ==> "cache_path" => false,
```## Environment
The application expects you to set your web root to the public directory and have
the ability to rewrite URLS. A default `.htaccess` is provided.# Architecture
Collective provides base classes that are container aware so you don't need to write your own!## Actions
Collective provides an extendable class `Geggleto\Helper\BaseAction` for your Actions
if you are following ADR.## Controllers
Collective provides an extendable class `Geggleto\Helper\BaseContainerClass` for your
Controllers if you are following MVC.## Middleware
Collective provides an extendable class `Geggleto\Helper\BaseMiddleware` for your Middleware.## Dependency Resolution
In any class that extends either (`BaseAction`, `BaseMiddleware` or `BaseContainerClass`),
any dependency listed in `app.config` will be available in the class by accessing
it through the `app.config` key as a class variable.
That is to say, if I want to access the session object in an action
```php
//Access Session object in a Action
public function __invoke (ServerRequestInterface $request, ResponseInterface $response, array $args)
{
return $this->twig->render($response, "hello.twig", [$this->session->get('name')]);
}
```# Routes
Routes can be configured in the `app.config` class for easy configuration.
Each route must have a pattern (key) and a callable element. Middleware and names are optional```php
'routes' => [
//What HTTP Verb
'get' => [
// / => Pattern
// callable => What action to run
// mw => What middleware are we running
// name => name the route
'/' => [ "callable" => HelloWorldAction::class, "mw" => [], "name" => "" ]
]
]
```# Application Middleware
Application middleware can be configured in the `app.config` file as well.```php
"app-middleware" => [
LoggerMiddleware::class
]
```# Middleware Closures
Middleware closures can be added at any point before run by wrapping your closure
with a factory closure from pimple.
```php
$this->collective->addMw("Test2", function ($c) {
return function ($req, $res, $next) {
$res = $next($req, $res);
$res->write("Test2");
return $res;
};
}
);
```# Session
Sessions are on by default.
If you want to turn sessions off or swap packages, then remove the `session` key
from the `app.config` file. The session class uses whatever your php is configured
to use [which is files by default].Supported Syntax:
```php
$this->session->get('key');
$this->session->put('key', 'value');
$this->session->has('key');
$this->session->key;
$this->session->key = 'value';
isset($this->session->key);
```If you want to use a different storage engine than the see this page.
(http://php.net/manual/en/function.session-set-save-handler.php)
# Flash Messages
Flash Messages require the Session component. It is enabled by default
Flash Messages will be deleted on the next request.```php
//Create a flash message ... do it someplace
$this->flash->put('message', 'my message');
``````php
//Access the message on the next request via ServerRequestInterface
$request->getAttribute('message');
``````php
//Access the message in Twig on the next request
{{ flash['message'] }}
```# CLI Tools
Collective provides a Symfony console app for creating Actions and Middleware easily.### Actions
```php
php cli.php create:action MyActionClassName
```### Middleware
```php
php cli.php create:middleware MyMiddlewareClassName
```# Error Pages
Custom Error handlers are provided for:
- Page not found ``` templates/404.twig ```
- Method not allowed ``` templates/405.twig ```
- Server Error ``` templates/500.twig ```# Optional Packages
... Coming soon