matt-daneshvar/laravel-resource-actions

dev-master 2020-07-03 13:27 UTC

This package is auto-updated.

Last update: 2024-08-29 05:16:39 UTC


README

Packagist PHP Version Support Build Status GitHub

如果你已经构建了一打Laravel应用程序,如果你和我一样,你可能会厌倦了一千次地重写基本的CRUD控制器。这个包通过将那些重复的操作提取到几个神奇的特性中来简化你的代码。

安装

使用composer要求包

composer require matt-daneshvar/laravel-resource-actions

使用方法

安装后,你可以编写

class TaskController extends BaseController
{
    use Index, Create, Store, Show, Edit, Update, Destroy;

    protected $rules = ['name' => 'required|string|max:250'];
}

而不是

class TaskController extends BaseController
{
    protected $rules = ['name' => 'required|string|max:250'];

    public function index()
    {
        return view('task.index', ['tasks' => Task::paginate(20)]);
    }

    public function create()
    {
        return view('task.create');
    }

    public function store(Request $request)
    {
        $input = $request->validate($this->rules);

        Task::create($input);

        return back()->with('success', 'A new task is successfully created.');
    }

    public function show(Task $task)
    {
        return view('task.show', ['task' => $task]);
    }

    public function edit(Task $task)
    {
        return view('task.edit', ['task' => $task]);
    }

    public function update(Task $task, Request $request)
    {
        $input = $request->validate($this->rules);

        $task->update($input);

        return back()->with('success', 'The task is successfully updated.');
    }

    public function destroy(Task $task)
    {
        $task->delete();

        return back()->with('success', 'The task is successfully deleted.');
    }
}

操作

索引

index操作返回包含相关模型分页集合的resource.index视图,因此你可以编写

class TaskController extends BaseController
{
    use Index;
}

而不是

class TaskController extends BaseController
{
    public function index()
    {
        return view('task.index', ['tasks' => Task::paginate(20)]);
    }
}

创建

create操作返回resource.create视图,因此你可以编写

class TaskController extends BaseController
{
    use Create;
}

而不是

class TaskController extends BaseController
{
    public function create()
    {
        return view('task.create');
    }
}

存储

store操作将请求与$rules进行验证,持久化新的模型,并带有成功消息重定向回来。对于这个操作,你可以编写

class TaskController extends BaseController
{
    use Store;

    protected $rules = ['name' => 'required|string|max:250'];
}

而不是

class TaskController extends BaseController
{
    protected $rules = ['name' => 'required|string|max:250'];
    
    public function store(Request $request)
    {
        $input = $request->validate($this->rules);

        Task::create($input);

        return back()->with('success', 'A new task is successfully created.');
    }
}

显示

show操作返回带有相关模型的resource.show视图,因此你可以编写

class TaskController extends BaseController
{
    use Show;
}

而不是

class TaskController extends BaseController
{
    public function show(Task $task)
    {
        return view('task.show', ['task' => $task]);
    }
}

编辑

edit操作返回带有相关模型的resource.edit视图,因此你可以编写

class TaskController extends BaseController
{
    use Edit;
}

而不是

class TaskController extends BaseController
{
    public function edit(Task $task)
    {
        return view('task.edit', ['task' => $task]);
    }
}

更新

update操作将请求与$rules进行验证,更新相关模型,并带有成功消息重定向回来。对于这个操作,你可以编写

class TaskController extends BaseController
{
    use Update;
    
    protected $rules = ['name' => 'required|string|max:250'];
}

而不是

class TaskController extends BaseController
{
    protected $rules = ['name' => 'required|string|max:250'];
    
    public function update(Task $task, Request $request)
    {
        $input = $request->validate($this->rules);

        $task->update($input);

        return back()->with('success', 'The task is successfully updated.');
    }
}

销毁

destroy操作删除相关模型并带有成功消息重定向回来。对于这个操作,你可以编写

class TaskController extends BaseController
{
    use Destroy;
}

而不是

class TaskController extends BaseController
{
    public function destroy(Task $task)
    {
        $task->delete();

        return back()->with('success', 'The task is successfully deleted.');
    }
}

使用所有操作

如果你打算在控制器中包含所有7个资源操作,你可以使用ResourceActions特性作为别名

class TaskController extends BaseController
{
    use ResourceActions;
}

这相当于

class TaskController extends BaseController
{
    use Index, Create, Store, Show, Edit, Update, Destroy;
}

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件