arobs/laravelmodules

dev-master / 1.0.x-dev 2014-11-26 14:02 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:54:27 UTC


README

这是一个用于模块化的 Laravel 5 包,其中包含 Caffeinated Modules 和 Laracasts Commander 包

Caffeinated Modules

Build Status Scrutinizer Code Quality Latest Stable Version Total Downloads Latest Unstable Version License

所有初始发布的功能已经完成,如路线图中概述。我只是在等待 Laravel 5.0 正式发布,然后将其标记为稳定版 v1.0。在此期间,我将继续清理现有的代码。

要了解有关此包的更多信息,请参阅完整的文档。下面提供了快速安装说明。

安装

首先,通过 Composer 安装此包。最佳方法是使用终端通过 Composer 本身进行操作

composer require caffeinated/modules

此操作完成后,只需将服务提供者和外观类添加到项目中的 config/app.php 文件

服务提供者

'Caffeinated\Modules\ModulesServiceProvider'

外观

'Module' => 'Caffeinated\Modules\Facades\Module'

新的 Artisan 命令

php artisan module:controller ModuleName ControllerName

就这样!有了咖啡,开始构建一些酷炫的模块吧!

Laravel Commander

此包提供了一种简单的方式来利用 Laravel 项目中的命令和领域事件。

安装

像往常一样,通过 Composer 安装 Commander。

"require": {
    "laracasts/commander": "~1.0"
}

接下来,更新 app/config/app.php 以在提供者数组中包含对包提供者的引用。

'providers' => [
    'Laracasts\Commander\CommanderServiceProvider'
]

使用方法

最重要的建议是记住这种方法并不适用于所有情况。如果您正在构建一个没有太多业务逻辑的简单 CRUD 应用程序,那么您可能不需要这个。仍然想继续?好的 - 前进!

目标

想象一下,您正在为招聘广告应用程序构建应用程序。现在,当雇主发布新的招聘广告时,需要发生很多事情,对吧?好,不要把所有这些事情都放到您的控制器中!相反,让我们利用命令、处理程序和领域事件来清理我们的代码。

控制器

首先,我们可以将此包的 CommanderTrait 注入到您的控制器中(或如果您愿意,BaseController)。这将为您提供一些帮助程序方法来管理将命令传递给命令总线的过程。

<?php

use Laracasts\Commander\CommanderTrait;

class JobsController extends \BaseController {

	use CommanderTrait;

	/**
	 * Publish the new job listing.
	 *
	 * @return Response
	 */
	public function store()
	{

	}

}

好吗?接下来,我们将这个“指令”(发布招聘广告)表示为一个命令。这仅仅是一个简单的 DTO。

<?php

use Laracasts\Commander\CommanderTrait;
use Acme\Jobs\PostJobListingCommand;

class JobsController extends \BaseController {

	use CommanderTrait;

	/**
	 * Post the new job listing.
	 *
	 * @return Response
	 */
	public function store()
	{
        $this->execute(PostJobListingCommand::class);

		return Redirect::home();
	}

注意我们是如何将用户的指令(或命令)表示为一个可读的类的:PostJobListingCommandexecute 方法将期望命令的类路径,作为字符串。上面,我们使用有用的 PostJobListingCommand::class 来获取它。或者,您也可以手动将路径作为字符串写出来。

命令 DTO

很简单,对吧?我们创建一个命令来表示指令,然后将该命令扔到命令总线中。下面是这个命令可能的样子

<?php namespace Acme\Jobs;

class PostJobListingCommand {

    public $title;

    public $description;

    public function __construct($title, $description)
    {
        $this->title = $title;
        $this->description = $description;
    }

}

当您在 CommanderTrait 上调用 execute 方法时,它将自动将来自 Input::all() 的数据映射到您的命令。您不需要手动进行此操作。

那么命令总线到底做什么呢?把它想象成一个简单的工具,它将这个命令转换为一个相关的处理程序类,该处理程序类将处理命令!在这种情况下,这意味着根据需要委派发布新的招聘广告。

默认情况下,命令总线将对命令类名称进行快速搜索和替换,以确定从IoC容器中解析哪个处理类。因此

  • PostJobListingCommand => PostJobListingCommandHandler
  • ArchiveJobCommand => ArchiveJobCommandHandler

明白了?好的。但请注意,如果您更喜欢不同的命名约定,可以覆盖默认设置。请参见下文。