symplify/symbiotic-controller

此包已被废弃,不再维护。作者建议使用 nette/application 包代替。

v2.5.8 2017-09-19 17:58 UTC

README

Build Status Downloads Subscribe

编写一次控制器,让许多其他框架可以使用它。

此存储库由 @Lexinek 维护。

安装

composer require symplify/symbiotic-controller

在Nette中的使用

将扩展注册到您的应用程序

# app/config/config.neon

extensions:
    - Symplify\SymbioticController\Adapter\Nette\DI\SymbioticControllerExtension
    - Contributte\EventDispatcher\DI\EventDispatcherExtension

1. 创建带有 __invoke() 方法的 app/Presenters/ContactPresenter.php 控制器

A. 经典渲染操作

这是您最常用的。

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. 最简单的响应

namespace App\Presenters;

use Nette\Application\Responses\TextResponse;

final class ContactPresenter
{
    public function __invoke(): TextResponse
    {
        return new TextResponse('Hi!');
    }
}

C. 或者JSON响应

namespace App\Presenters;

use Nette\Application\Responses\JsonResponse;

final class ContactPresenter
{
    public function __invoke(): TextResponse
    {
        return new JsonResponse('Hi!');
    }
}

2. 创建 app/templates/Contact.latte 模板

Hey :-)

3. 注册控制器路由

# app/Router/RouterFactory.php

namespace App\Router;

final class RouterFactory
{
    public function create(): RouteList
    {
        $routes = new RouteList;
        $routes[] = new PresenterRoute('/contact', ContactPresenter::class);
        $routes[] = new Route('<presenter>/<action>', 'Homepage:default');

        return $routes;
    }
}

4. 在浏览器中打开页面并享受

这就是全部 :)