📜  如何在 laravel 中将数据传递给控制器 - PHP (1)

📅  最后修改于: 2023-12-03 15:38:19.304000             🧑  作者: Mango

如何在 Laravel 中将数据传递给控制器

在 Laravel 中,我们可以通过路由参数、请求参数、表单提交等方式将数据传递给控制器。下面我们将介绍其中的几种方式。

通过路由参数传递数据

在路由定义中,我们可以使用 {} 符号将某个参数定义为路由参数。例如:

Route::get('/user/{id}', 'UserController@show');

上面的路由定义中,{id} 就是一个路由参数,可以在控制器的方法中使用 $id 变量获取它的值。例如:

class UserController extends Controller
{
    public function show($id)
    {
        $user = User::find($id);
        return view('user.show', ['user' => $user]);
    }
}

上面的代码中,我们首先通过 $id 变量获取路由参数值,然后使用该值从数据库中查询出对应的用户数据,并将结果传递给视图文件。

通过请求参数传递数据

另一种常见的方式是通过 URL 查询参数(GET 请求参数)传递数据。例如:

Route::get('/user', 'UserController@search');

上面的路由定义中,/user 路径没有定义路由参数,因此我们可以通过 URL 查询参数传递数据。例如:

class UserController extends Controller
{
    public function search(Request $request)
    {
        $keyword = $request->input('q');
        $users = User::where('name', 'like', "%$keyword%")->get();
        return view('user.search', ['users' => $users]);
    }
}

上面的代码中,我们首先从 $request 对象中获取名为 q 的请求参数,然后根据该参数从数据库中查询出满足条件的用户数据,并将结果传递给视图文件。

通过表单提交传递数据

如果要使用 POST 或 PUT 请求方式提交数据,可以通过表单提交传递数据。例如:

Route::post('/user', 'UserController@store');

上面的路由定义中,/user 路径定义了 POST 请求方式,因此我们可以通过表单提交传递数据。例如:

<form method="POST" action="/user">
    @csrf
    <input type="text" name="name" placeholder="姓名">
    <input type="email" name="email" placeholder="邮箱">
    <button type="submit">提交</button>
</form>

上面的 HTML 代码中,我们使用 form 元素定义表单,指定了提交方式和请求路径,并使用 @csrf 指定了 CSRF 令牌,以防止跨站请求伪造攻击。通过 input 元素定义了两个表单字段(姓名和邮箱),通过 button 元素定义了提交按钮。当用户提交表单后,会将数据以 POST 请求方式发送到 /user 路径,由 UserController@store 方法接收。例如:

class UserController extends Controller
{
    public function store(Request $request)
    {
        $user = new User();
        $user->name = $request->input('name');
        $user->email = $request->input('email');
        $user->save();
        return redirect()->route('user.show', ['id' => $user->id]);
    }
}

上面的代码中,我们首先从 $request 对象中获取表单提交的数据,然后根据数据创建一个新的用户并保存到数据库中。最后,将用户 ID 作为路由参数重定向到另一个页面。