📜  拉拉维尔 |控制器基础知识(1)

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

拉拉维尔 | 控制器基础知识

简介

控制器是拉拉维尔框架的核心组件之一,用于处理 HTTP 请求并返回响应。它们负责接收请求并将请求路由到正确的处理程序。

控制器通常在 app/Http/Controllers 目录下。每个控制器都应该继承自 Illuminate\Routing\Controller 类。

定义控制器
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}
调用控制器

控制器可以通过 HTTP 请求路由来调用。

例如,假设我们有一个 UserController 类,我们可以通过使用以下路由定义来显示用户列表:

Route::get('/users', 'UserController@index');

当用户访问 /users 路由时,控制器的 index 方法将被调用,它将返回用户列表。

可以在控制器中使用依赖注入来处理其他类的实例。例如,在上面的用户控制器中,我们可以注入服务容器中的 UserRepository:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Repositories\UserRepository;

class UserController extends Controller
{
    protected $users;

    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }

    public function index()
    {
        $users = $this->users->all();

        return view('users.index', compact('users'));
    }
}
响应

控制器必须返回响应给客户端。这可以通过多种方式完成,例如:

  • 返回视图。
  • 返回 JSON 数据。
  • 返回重定向。
返回视图

在控制器方法中,可以使用 view() 函数返回视图:

public function index()
{
    return view('users.index');
}
返回 JSON 数据

在控制器方法中,可以使用 response()->json() 函数返回 JSON 数据:

public function index()
{
    $users = [
        ['id' => 1, 'name' => 'John'],
        ['id' => 2, 'name' => 'Jane'],
        ['id' => 3, 'name' => 'James'],
    ];

    return response()->json($users);
}
返回重定向

在控制器方法中,可以使用 redirect() 函数返回重定向:

public function index()
{
    return redirect('/home');
}
总结

控制器是一个重要的组件,在拉拉维尔框架和其他 Web 开发框架中都有类似的概念。掌握控制器基础知识,将有助于编写高质量的代码,并提高开发效率。