shincode/envision

适用于 Laravel 4 的 Envision

dev-master 2018-03-26 21:02 UTC

This package is not auto-updated.

Last update: 2024-09-28 13:57:27 UTC


README

Envision 是 Laravel 4.2 的框架扩展。 ProjectStatus

使用 Envision 的目标是加快开发速度。为此,它执行了一些操作

  • 即时生成和自动加载 Envision 识别的类。
  • 自动使用 Ardent 包。
  • 自动使用 Presenter 包。

安装

Envision 依赖于您 Laravel 框架中的 Ardent 和 Presenter 包。因此,请将那些包也添加进去。将 shincode/envision、Ardent 和 Presenter 添加到 composer.json

"require": {
  "laravel/framework": "4.2.*",
  "shincode/envision": "dev-master",
  "laravelbook/ardent": "2.5.*",
  "robclancy/presenter": "1.3.*"
}

使用 composer 更新

composer update

app/config/app.php 中添加服务提供者

'Shincode\Envision\EnvisionServiceProvider',
'Robbo\Presenter\PresenterServiceProvider',

复制配置文件

php artisan config:publish shincode/envision

app/config/packages/shincode/envision/settings.php 中,将 autoload 和 create 设置为 true 以启用快速开发

'autoload' => true,
'create' => true,

示例

这里有一个简短教程。让我们为数据库创建一个名为 phones 的表。运行以下 artisan 命令

php artisan migrate:make create_phones_table

让我们编辑这个文件(保持简单)

public function up() {
	Schema::create('phones', function(Illuminate\Database\Schema\Blueprint $table) {
		$table->increments('id');
		$table->string('name');
		$table->timestamps();
	});
}

运行迁移

php artisan migrate

现在将其添加到 app/routes.php

Route::controller('phone', 'PhoneController');

注意,您尚未创建任何文件,但立即引用了 PhoneController。运行应用程序。您将看到 PhoneController.php 已出现在您的 app/controllers 结构中。

让我们打开这个控制器并添加一个函数

public function getIndex() {
	PhoneResource::insert(array('name' => 'Sunkia'));
	PhoneResource::insert(array('name' => 'Nosy'));
	PhoneResource::insert(array('name' => 'Namnung'));
}

看到了吗?您实际上并没有创建类,只是编写了您想做的事情。首先我们创建了通用的路由方法。现在我们填充了一些数据库,以便我们可以使用它。由于我们创建了一个控制器路由到 'phone',现在我们只需访问 URL /phone,函数就会被执行。当然,我们通常使用种子来完成这个任务,但这样您可以理解创建新条目是多么容易。

下一步是显示它们。让我们看看这是如何工作的。将 getIndex 改为其他内容

public function getIndex() {
    $phones = PhoneResource::all();
    return View::make('phone')->with('phones', $phones);
}

让我们也创建一个视图文件,并将其保存为 view/phone.blade.php

@foreach($phones as $phone)
	<h1>{{ $phone->name }}</h1>
@endforeach

现在打开 URL 到 /phone,您会发现它真的可以工作!

到目前为止,您应该看到了一些新文件被创建。我们使用了 Resource 类、Ardent 类和 Presenter 类。

让我们尝试使用 Presenter 类。在您的应用文件夹中应该有一个新的名为 'presenters' 的文件夹。打开 PhonePresenter.php 并添加以下函数

public function presentFoo() {
	return 'bar';
}

现在让我们将 view/phone.blade.php 编辑为以下内容

@foreach($phones as $phone)
	<h1>{{ $phone->name }}</h1>
	<span>{{ $phone->foo }}</span>
@endforeach

就这样。额外的视图逻辑就在您的指尖。有关 presenter 的更多信息,请参阅此处: https://github.com/robclancy/presenter

Ardent 示例将在以后添加,目前您可以在以下位置了解 ardent: https://github.com/laravelbook/ardent

部署

对于开发,拥有 Envision 真的很不错。但在部署时,强烈建议关闭自动生成。在 app/config/packages/shincode/envision/settings.php(如果您已发布配置)中,您可以更改以下内容

  • autoload = 自动尝试查找 Envision 使用的类。可以保留,但会对性能产生影响。对于最终的部署,建议实际上自动加载所有文件并在 app.php 中创建别名。
  • 创建 = 当找不到时自动生成类。出于明显的原因,强烈建议在部署时禁用。
  • 日志 = 目前没有任何操作。

我建议使用环境。例如,我用本地环境进行开发,并在 app/config/packages/shincode/envision/local/settings.php 中有一个 settings.php 的副本。默认情况下,该包中这两个选项都默认禁用,因此安装后包实际上处于“关闭”状态,出于安全原因。

为 Envision 贡献

所有问题和 pull 请求都应提交到 shincode/envision 仓库。

许可证

Envision 是开源软件,许可协议为 MIT 许可协议