📜  用户在 laravel user_id 中按 id 发帖 - PHP (1)

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

用户在 Laravel user_id 中按 id 发帖 - PHP

本文介绍在使用 Laravel 框架开发的网站中,如何让用户按照 id 发帖的方法。

步骤
1. 数据库表设计

首先我们需要在数据库中创建一个表用来存储帖子信息,这个表需要包含以下字段:

| 字段名 | 类型 | 描述 | | -------- | --------- | ------------------ | | id | int | 帖子的唯一标识符 | | user_id | int | 发帖人的唯一标识符 | | content | text | 帖子内容 | | created_at | timestamp | 帖子创建时间 |

2. 创建帖子模型

在 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);
    }
}
3. 创建帖子控制器

接下来我们需要创建一个控制器来处理用户发帖的请求。在终端中输入以下命令:

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 函数跳转到用户帖子列表页。

4. 列表页及列表页路由

我们需要创建一个帖子列表页,用于展示用户发布的帖子信息。在视图 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');
5. 创建帖子视图

最后,我们需要创建一个用于发布帖子的页面。在视图 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 发帖的方法,涵盖了数据库表设计、模型定义、控制器编写、路由定义和视图创建等多个方面。希望本文能够对大家有所帮助。