Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/deprecated-packages/symbioticcontroller
[READ-ONLY] Invocable, single-action and framework-independent presenters in Nette
https://github.com/deprecated-packages/symbioticcontroller
adr controller invocable-controller mvc mvp nette php71 presenter
Last synced: 7 days ago
JSON representation
[READ-ONLY] Invocable, single-action and framework-independent presenters in Nette
- Host: GitHub
- URL: https://github.com/deprecated-packages/symbioticcontroller
- Owner: deprecated-packages
- License: mit
- Archived: true
- Created: 2017-03-22T22:28:19.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-10-24T14:20:44.000Z (over 7 years ago)
- Last Synced: 2024-12-24T00:16:05.775Z (about 1 month ago)
- Topics: adr, controller, invocable-controller, mvc, mvp, nette, php71, presenter
- Language: PHP
- Homepage: https://www.tomasvotruba.cz/blog/2017/06/19/symbiotic-controller-nette-presenter-with-freedom/
- Size: 75.2 KB
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Symbiotic Controller
[![Build Status](https://img.shields.io/travis/Symplify/SymbioticController/master.svg?style=flat-square)](https://travis-ci.org/Symplify/SymbioticController)
[![Downloads](https://img.shields.io/packagist/dt/symplify/symbiotic-controller.svg?style=flat-square)](https://packagist.org/packages/symplify/symbiotic-controller)
[![Subscribe](https://img.shields.io/badge/subscribe-to--releases-green.svg?style=flat-square)](https://libraries.io/packagist/symplify%2Fsymbiotic-controller)*Write controller once and let many other frameworks use it.*
This repository is maintained by [@Lexinek](https://github.com/lexinek).
## Install
```bash
composer require symplify/symbiotic-controller
```## Usage in Nette
### Register Extensions to you App
```yaml
# app/config/config.neonextensions:
- Symplify\SymbioticController\Adapter\Nette\DI\SymbioticControllerExtension
- Contributte\EventDispatcher\DI\EventDispatcherExtension
```### 1. Create `app/Presenters/ContactPresenter.php` Presenter with `__invoke()` Method
#### A. Classic Render Action
This is what you use the most often.
```php
namespace App\Presenter;use Symplify\SymbioticController\Contract\Template\TemplateRendererInterface;
final class StandalonePresenter
{
/**
* @var TemplateRendererInterface
*/
private $templateRenderer;public function __construct(TemplateRendererInterface $templateRenderer)
{
$this->templateRenderer = $templateRenderer;
}public function __invoke(): string
{
return $this->templateRenderer->renderFileWithParameters(
__DIR__ . '/templates/Contact.latte'
);
}
}
```#### B. The Simplest Response
```php
namespace App\Presenters;use Nette\Application\Responses\TextResponse;
final class ContactPresenter
{
public function __invoke(): TextResponse
{
return new TextResponse('Hi!');
}
}
```#### C. Or Json Response
```php
namespace App\Presenters;use Nette\Application\Responses\JsonResponse;
final class ContactPresenter
{
public function __invoke(): TextResponse
{
return new JsonResponse('Hi!');
}
}
```### 2. Create `app/templates/Contact.latte` template
```twig
Hey :-)
```### 3. Register Presenter Route
```php
# app/Router/RouterFactory.phpnamespace App\Router;
final class RouterFactory
{
public function create(): RouteList
{
$routes = new RouteList;
$routes[] = new PresenterRoute('/contact', ContactPresenter::class);
$routes[] = new Route('/', 'Homepage:default');return $routes;
}
}
```### 4. Open page in Browser and Enjoy
That's all :)