📜  资源控制器 laravel - C 编程语言(1)

📅  最后修改于: 2023-12-03 14:57:47.223000             🧑  作者: Mango

资源控制器 Laravel - C 编程语言

Laravel 是一个流行的 PHP 框架,提供了许多方便的工具和功能来加速 WEB 应用程序开发。其中,资源控制器是 Laravel 中一个非常常用的工具,用于管理我们的应用程序中的资源。

本文将着重介绍如何在 Laravel 中使用资源控制器,并构建 CRUD 操作。同时,我们还将讨论使用资源控制器的一些最佳实践。

什么是资源控制器?

在一个 WEB 应用程序中,我们通常需要对资源进行 CRUD 操作(即创建、读取、更新、删除)。例如,我们需要为许多不同的模型创建管理器,这些模型的管理器将使用相同的 CRUD 操作。这时,资源控制器就可以发挥作用了。

资源控制器是 Laravel 框架中一种专门用于管理 CRUD 操作的控制器。咱们可以使用资源控制器来简化应用程序开发,减少重复代码的编写。它可以非常方便地为 Web 应用程序中的任何资源(如用户、文章、评论等)提供常见的 CRUD 操作。

如何使用资源控制器?

将控制器转换为 Laravel 资源控制器很简单。下面是一份常见的控制器代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Article;

class ArticlesController extends Controller
{
    public function index(){
        $articles = Article::all();
        return view('articles.index', compact('articles'))
    }

    public function show($id){
        $article = Article::find($id);
        return view('articles.show', compact('article'));
    }

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

    public function store(Request $request){
        $input = $request->all();
        Article::create($input);
        return redirect('/articles');
    }

    public function edit($id){
        $article = Article::find($id);
        return view('articles.edit', compact('article'));
    }

    public function update($id, Request $request){
        $article = Article::find($id);
        $input = $request->all();
        $article->update($input);

        return redirect('/articles');
    }

    public function destroy($id){
        $article = Article::find($id);
        $article->delete();

        return redirect('/articles');
    }
}

使用资源控制器,可以简化上面的控制器代码。资源控制器默认情况下实现了常见的 CRUD 操作。下面是如何将上面的控制器代码转换为资源控制器代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Article;

class ArticlesController extends Controller
{
    public function index(){
        $articles = Article::all();
        return view('articles.index', compact('articles'))
    }

    public function show(Article $article){
        return view('articles.show', compact('article'));
    }

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

    public function store(Request $request){
        $input = $request->all();
        Article::create($input);
        return redirect('/articles');
    }

    public function edit(Article $article){
        return view('articles.edit', compact('article'));
    }

    public function update(Article $article, Request $request){
        $input = $request->all();
        $article->update($input);

        return redirect('/articles');
    }

    public function destroy(Article $article){
        $article->delete();

        return redirect('/articles');
    }
}

如上所示,控制器代码已大大简化。现在,当我们在应用程序中访问 articles 资源时,Laravel 默认会执行相应的操作:

| METHOD | URL | ACTION | | ------ | ---------------| -------------------| | GET | /articles | index() | | GET | /articles/{id} | show($id) | | GET | /articles/create | create() | | POST | /articles | store(Request $req)| | GET | /articles/{id}/edit | edit($id) | | PUT | /articles/{id} | update($id, Request $req)| | DELETE | /articles/{id} | destroy($id) |

最佳实践
显式绑定(Explicit Binding):

Laravel 支持资源控制器的显式绑定。通过显式绑定,咱们可以解决上面讨论的 Model 查找问题。例如,如果你的模型的主键为 slug 而不是 id,那么可以定义一个显式绑定以在查找时使用 slug 。在资源控制器中定义显式绑定的方法与普通控制器中定义方法相同,但需要使用 RouteServiceProvider 类。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use App\Article;

class RouteServiceProvider extends ServiceProvider
{
    public function boot()
    {
        parent::boot();

        Route::bind('article', function($slug){
            return Article::findOrFail($slug);
        });
    }

    public function map()
    {
        $this->mapWebRoutes();
    }

    protected function mapWebRoutes()
    {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/web.php'));
    }
}
RESTful 资源控制器

使用资源控制器时,我们通常遵循 RESTful 原则。资源控制器通常用于管理某种数据资源(如文章、用户、评论等)的 CRUD 操作。RESTful 资源控制器在 Laravel 中非常有用,可以大大减少控制器代码的数量。在 Laravel 中,您可以对多个资源使用同一个控制器来完成 CRUD 操作。下面是一些常见的 RESTful 路由操作:

|装订节 | URI | 操作 | 路由名称 | |----- |----- |---- |-------------| |GET | /photos | index | photos.index | |GET | /photos/create | create | photos.create | |POST | /photos | store | photos.store | |GET | /photos/{photo} | show | photos.show | |GET | /photos/{photo}/edit | edit | photos.edit | |PUT/PATCH | /photos/{photo} | update | photos.update | |DELETE | /photos/{photo} | destroy | photos.destroy |

总结

简而言之,Laravel 资源控制器是一个非常方便的工具,可大大简化 Web 应用程序的开发。在本文中,我们介绍了资源控制器的概念、如何在 Laravel 将控制器转换为资源控制器以及一些最佳实践。希望本文对你学习 Laravel 有所帮助!