windwalker/controller

Windwalker 控制器包

安装: 22

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 5

分支: 0

类型:windwalker-package

2.1.9 2016-02-12 15:36 UTC

README

Windwalker 控制器包是一个简单的接口,用于控制一些业务逻辑,它不依赖于任何其他包。您可以将其集成到任何系统中。

通过 Composer 安装

将以下内容添加到您的 composer.json 文件中的 require 块。

{
    "require": {
        "windwalker/controller": "~2.0"
    }
}

创建您的控制器

use Windwalker\Controller\Controller;

class IndexController extends AbstractController
{
    public function execute()
    {
        return 'Index';
    }
}

$controller = new IndexController;

$output = $contorller->execute();

Windwalker 控制器是一个“单动作控制器”,遵循单一职责原则,每个控制器只维护一个任务(动作)。它受到 Joomla 新 MVC 的启发。您可以为 CRUD 创建 IndexControllerCreateControllerUpdateControllerDeleteController

使用输入和应用

默认情况下,控制器维护一个输入和一个应用对象。我们可以在构造时设置它。

use Windwalker\Controller\Controller;

class IndexController extends AbstractController
{
    public function execute()
    {
        // Get params from http request
        $method = $this->input->get('_method');

        $this->app->redirect('...');

        return true;
    }
}

$input = new Input;
$app = new WebApplication;

$controller = new IndexController($input, $app);

$output = $contorller->execute();

它不依赖于 Windwalker 自身,您可以将其他框架的输入和应用推入其中。

$input = new Request;
$app = new HttpKernel;

$controller = new IndexController($input, $app);

$output = $contorller->execute();

HMVC

在 Windwalker 控制器中使用 HMVC 非常简单。

class IndexController extends AbstractController
{
    public function execute()
    {
        $this->input->set('id', 123);

        $foo = new FooController($this->input, $this->app);

        echo $foo->execute();

        return true;
    }
}

多动作控制器

如果您熟悉常见的多动作模式,请使用 AbstractMultiActionController

use Windwalker\Controller\AbstractMultiActionController;

class ArticleController extends AbstractMultiActionController
{
    public function indexAction()
    {}

    public function saveAction($id = null, $data = array())
    {}

    public function deleteAction($id = null)
    {}
}

$controller = new ArticleController;

// Will call saveAction()
$controller->setActionName('save')
    ->setArguments(array(5, $data))
    ->execute();

如果没有设置动作,将调用 doExecute(),但您仍然需要首先覆盖 doExecute()