michaeltintiuc/laravel-component

为laravel项目提供几个启动接口和抽象类

v0.1 2017-07-16 21:13 UTC

This package is not auto-updated.

Last update: 2024-09-22 08:04:51 UTC


README

💡 为laravel项目提供几个启动接口和抽象类

内容

  1. 安装
  2. 使用
  3. 贡献

安装

通过composer安装

composer require michaeltintiuc/laravel-component

使用

目录结构

app/Components/ - 存储所有组件目录,如Users、Posts、Tags等

app/Components/Users - 存储模型类(例如User)以及所有环境目录,如Admin、Site等

app/Components/Users/{ENV} - 存储与组件特定环境实现相关的所有类和 routes.php

app/Components/Users/{ENV}/Requests - 存储特定环境组件的表单验证类

控制器

namespace Acme\Components\Users\Admin;

use Illuminate\Http\Request;
use MichaelT\Component\Admin\ComponentController;

class UsersController extends ComponentController
{
    public function __construct(Request $request, PostTagsRepo $repo)
    {
        parent::__construct($request, $repo);
        $this->setComponent('user');
        $this->setBaseView('admin.users');
        $this->setSearchRoute('admin.users.index');
    }

    public function index(Request $request)
    {
        if ($request->has('search')) {
            return $this->search($request->search);
        }

        $this->setTitle('All users');
        $this->setHeading('Users list');
        $users = $this->repo->all();

        return $this->view('index')
            ->with(compact('users'));
    }
    
    ...
}

存储库

接口 合同

namespace Acme\Components\Users\Admin;

use MichaelT\Component\Admin\Contracts\RepoContract;
use MichaelT\Component\Admin\Contracts\Searchable;

interface UsersRepoContract extends RepoContract, Searchable
{
}

存储库

namespace Acme\Components\Users\Admin;

use Acme\Components\Users\User;
use MichaelT\Component\Admin\ComponentRepo;
use Acme\Components\Users\Admin\UsersRepoContract;

class UsersRepo extends ComponentRepo implements UsersRepoContract
{
    public function __construct(User $model)
    {
        parent::__construct($model);
        $this->setComponent('user');
    }

    public function all()
    {
        return $this->model->get();
    }

    public function paginate()
    {
        return $this->model
            ->paginate($this->getPerPage());
    }

    public function find($id)
    {
        try {
            return $this->model->findOrFail($id);
        } catch (\Exception $e) {
            throw new \FindAdminException($this->error('find'));
        }
    }
    
    ...
}

路由

组件

Route::group(['namespace' => 'Acme\Components\Users\Admin'], function () {
    Route::resource('users', 'UsersController');
});

加载路由

Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {
    Route::group(['middleware' => ['auth']], function () {
        require_once app_path().'/Components/Users/Admin/routes.php';
    });
});

贡献

贡献、错误报告、特性及拉取请求始终欢迎!