📅  最后修改于: 2023-12-03 15:27:12.888000             🧑  作者: Mango
本文介绍在使用 Laravel 框架开发的网站中,如何让用户按照 id 发帖的方法。
首先我们需要在数据库中创建一个表用来存储帖子信息,这个表需要包含以下字段:
| 字段名 | 类型 | 描述 | | -------- | --------- | ------------------ | | id | int | 帖子的唯一标识符 | | user_id | int | 发帖人的唯一标识符 | | content | text | 帖子内容 | | created_at | timestamp | 帖子创建时间 |
在 Laravel 中,我们可以使用 Artisan 命令来生成帖子模型的代码。在终端中进入项目的根目录,然后输入以下命令:
php artisan make:model Post
这条命令将会在 app 目录下创建一个名为 Post
的模型文件,我们需要在模型文件中定义好和数据库表对应的字段名和关系。
class Post extends Model
{
protected $table = 'posts';
protected $fillable = ['user_id', 'content'];
public function user()
{
return $this->belongsTo(User::class);
}
}
接下来我们需要创建一个控制器来处理用户发帖的请求。在终端中输入以下命令:
php artisan make:controller PostController --resource --model=Post
这条命令将会生成一个名为 PostController
的控制器文件,并且会自动加入帖子模型的依赖。
在控制器中,我们需要定义一个方法来处理用户发帖的请求。假设我们在路由中定义了一个名为 post.create
的路由,那么这个方法的代码应该类似下面这样:
public function create(User $user)
{
return view('posts.create', compact('user'));
}
public function store(Request $request, User $user)
{
$post = new Post($request->all());
$post->user_id = $user->id;
$post->save();
return redirect()->route('user.posts', ['user_id' => $user->id]);
}
在 create
方法中,我们通过 view
函数渲染了一个名为 posts.create
的视图,并且把用于发布帖子的用户对象传递给视图。接下来,用户可以在视图中填写帖子内容并提交表单。
在 store
方法中,我们首先根据用户提交的表单数据创建一个新的帖子,然后把帖子的 user_id 属性设置为当前用户的 id,并保存到数据库中。最后,我们使用 redirect
函数跳转到用户帖子列表页。
我们需要创建一个帖子列表页,用于展示用户发布的帖子信息。在视图 posts.index
中,我们可以通过以下代码列出用户发布的帖子:
@foreach ($user->posts as $post)
<div class="post">
<h3 class="post-title">{{ $post->title }}</h3>
<p class="post-body">{{ $post->body }}</p>
<p class="post-meta">发布时间:{{ $post->created_at }}</p>
</div>
@endforeach
然后再在路由中定义一个名为 user.posts
的路由,用于展示当前用户发布的所有帖子信息:
Route::get('/users/{user}/posts', 'PostController@index')->name('user.posts');
最后,我们需要创建一个用于发布帖子的页面。在视图 posts.create
中,我们需要添加一个带有表单的页面:
<form method="POST" action="{{ route('user.posts.store', ['user_id' => $user->id]) }}">
{{ csrf_field() }}
<div class="form-group">
<label class="control-label" for="content">帖子内容:</label>
<textarea class="form-control" rows="5" id="content" name="content" required></textarea>
</div>
<button type="submit" class="btn btn-primary">发布帖子</button>
</form>
在这个页面中,我们使用了 form
标签来包裹表单,然后通过 action
属性指定了表单提交的路由。在输入框中,我们使用了 name
属性来指定表单数据的名称,这样在控制器中就可以通过 Request
对象的同名方法来获取表单数据了。
本文介绍了在 Laravel 中实现用户按照 id 发帖的方法,涵盖了数据库表设计、模型定义、控制器编写、路由定义和视图创建等多个方面。希望本文能够对大家有所帮助。