📜  laravel 路由显式绑定 - Html (1)

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

Laravel 路由显式绑定 - HTML

在 Laravel 框架中,我们可以使用路由显式绑定(Route Model Binding)来使控制器方法接收指定类型的模型实例作为参数。这项功能可以提高代码的可读性和简化处理逻辑。

本文将介绍 Laravel 路由显式绑定,并演示如何使用 HTML 表单来创建和修改模型实例。

路由显式绑定

我们可以在 Laravel 的路由文件中使用路由显式绑定。下面是一条显式绑定的路由示例:

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

在这条路由中,{user} 表示要绑定的模型实例的 ID。当用户访问路由时,Laravel 会自动加载与该 ID 相匹配的模型实例,并将其传递给 UserController@show 方法。

我们可以在控制器中使用模型实例,就像使用任何其他参数一样。例如,我们可以通过模型实例获取用户的详细信息:

use App\Models\User;

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

在这个控制器中,我们使用 User 类型的参数 $user,并通过 view 方法向用户显示用户的详细信息。

HTML 表单

既然我们了解了路由显式绑定的基本原理,下面我们将演示如何使用 HTML 表单来创建和修改模型实例。

创建模型实例

首先,我们将演示如何使用 HTML 表单来创建一个新的 User 模型实例。我们需要创建一个包含必要字段的表单,并将其提交到控制器方法中。

<form method="POST" action="{{ route('users.store') }}">
    @csrf

    <label for="name">Name:</label>
    <input type="text" name="name" />

    <label for="email">Email:</label>
    <input type="email" name="email" />

    <button type="submit">Create</button>
</form>

在这个表单中,我们定义了两个字段:nameemail。我们还向表单添加了一个名为 Create 的提交按钮。

当用户提交表单时,数据将被发送到 users.store 路由,该路由应该在路由文件中定义为创建用户的控制器方法。在这个控制器中,我们可以使用表单数据来创建新的 User 模型实例:

use App\Models\User;

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('users.show', ['user' => $user]);
    }
}

在这个控制器中,我们使用 $request 参数来获取表单数据,并使用它创建一个新的 User 模型实例。我们还使用 redirect 方法将用户重定向到新创建的用户的详细信息页面。

修改模型实例

接下来,我们将演示如何使用 HTML 表单来修改现有的 User 模型实例。我们需要创建一个包含要修改的字段的表单,并将其提交到控制器方法中。

<form method="POST" action="{{ route('users.update', ['user' => $user]) }}">
    @csrf
    @method('PATCH') 
  
    <label for="name">Name:</label>
    <input type="text" name="name" value="{{ $user->name }}" />

    <label for="email">Email:</label>
    <input type="email" name="email" value="{{ $user->email }}" />

    <button type="submit">Save Changes</button>
</form>

在这个表单中,我们在 action 属性中指定了我们要提交的路由,并在 method 属性中指定了使用 PATCH 方法进行修改操作。我们还定义了两个字段:nameemail,并在输入框中使用模型实例的值来填充这些字段。

当用户提交表单时,数据将被发送到 users.update 路由,该路由应该在路由文件中定义为修改用户的控制器方法。在这个控制器中,我们可以使用表单数据来修改现有的 User 模型实例:

use App\Models\User;

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

在这个控制器中,我们使用路由显式绑定来获取要修改的 User 模型实例。我们还使用 $request 参数来获取表单数据,并使用它修改现有的 User 模型实例。最后,我们再次使用 redirect 方法将用户重定向到修改后的用户的详细信息页面。

结论

在本文中,我们介绍了 Laravel 路由显式绑定的基本原理,并演示了如何使用 HTML 表单来创建和修改模型实例。这项功能可以提高代码的可读性和简化处理逻辑,在开发过程中非常有用。如果您想了解更多关于 Laravel 的知识,请访问官方文档网站:https://laravel.com/docs。