alexwenzel/cmsbasics

此包的最新版本(0.0.1-beta)没有可用的许可信息。

一个用于Laravel的包,我用它来构建重复的资源项。

0.0.1-beta 2014-10-07 11:03 UTC

This package is not auto-updated.

Last update: 2024-09-24 01:48:19 UTC


README

一个用于Laravel的包,我用它来构建重复的资源项。

模型

为您的资源项创建一个模型。

资源模型应该有一个静态的 $rules 属性,其中包含所有资源规则。

class Post extends \Eloquent {

  protected $table = 'posts';
  protected $fillable = ['title', 'body'];

  public static $rules = [
    'title' => 'required',
    'body' => 'required',
  ];
}

控制器

通过扩展基本资源控制器创建一个新的控制器。在构造函数中,您可以指定一些设置。

  • dependency => 您的资源项模型
  • resource_name => 您的资源标识符,您在 Route::resource() 中使用它
  • view_dir => 资源视图的路径
use Alexwenzel\Cmsbasics\Controllers\Resource;

class PostsController extends Resource {

  public function __construct(Post $model)
  {
    parent::__construct([
      'dependency'    => $model,
      'resource_name' => 'posts',
      'view_dir'      => 'path.to.views',
    ]);
  }
}

然后在您的路由中注册控制器。

Route::resource('posts', 'PostsController');

自定义行为

您可以通过重写特定方法来自定义基本资源控制器的行为

protected function _index_items()
protected function _store_data()
protected function _store_validator($data)
protected function _store_fails($data, $validator)
protected function _store_finished($data, $model)
protected function _update_data()
protected function _update_validator($id, $data)
protected function _update_fails($data, $model, $validator)
protected function _update_finished($data, $model)
protected function _destroy_finished()

事件

以下事件在基本资源控制器内部触发

index

[resource_name].index

create

[resource_name].create

store

[resource_name].store

传递新创建的资源作为第一个参数。

show

[resource_name].show

传递请求的资源作为第一个参数。

edit

[resource_name].edit

传递请求的资源作为第一个参数。

update

[resource_name].update

传递更新的资源作为第一个参数。

destroy

[resource_name].destroy

视图

此包为所有操作(index,create,show,edit)提供了默认视图。将包视图发布为一个起点。

php artisan view:publish alexwenzel/cmsbasics

将包视图复制到新文件夹并自定义它们。

class PostsController extends Resource {

  public function __construct(Post $model)
  {
    parent::__construct([
      'dependency'    => $model,
      'resource_name' => 'posts',
      'view_dir'      => 'path.to.views',
    ]);
  }
}