1.修改member表,增加字段remember_token,字段类型为varchar 长度100,允许为空;修改post表,增加user_id字段,保存发布文章的用户的id。2.为member表创建对应的模型类注意:模型类的初始化设置3.为post表创建对应的模型类注意:模型类根据对应数据表的初始化设置4.通过post的模型类实现文章的添加功能注意:需要通过Auth类获取登录用户的id一并添加到数据库中。Auth::guard(‘blog’)->id()获取登录用户的id5.制作首页效果参考如下图:查询所有文章信息,将文章的标题和发布时间输出到页面
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
为了帮助您解决这个问题,我会分步骤地解释如何完成每个任务,并提供相应的代码示例。这里假设您正在使用 Laravel 框架。
首先确保您的环境已经安装了Laravel,如果没有,请按照官方文档进行安装:https://laravel.com/docs/8.x/installation
第一步:修改数据库
- 使用Artisan命令行工具来迁移数据库结构。首先创建两个迁移文件,分别用于
member
和post
表:
php artisan make:migration add_remember_token_to_members --table=members php artisan make:migration add_user_id_to_posts --table=posts
打开这两个文件(通常位于
database/migrations
目录),然后分别编辑它们:add_remember_token_to_members.php
:use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddRememberTokenToMembers extends Migration { public function up() { Schema::table('members', function (Blueprint $table) { $table->string('remember_token', 100)->nullable(); }); } public function down() { Schema::table('members', function (Blueprint $table) { $table->dropColumn('remember_token'); }); } }
add_user_id_to_posts.php
:use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddUserIdToPosts extends Migration { public function up() { Schema::table('posts', function (Blueprint $table) { $table->unsignedBigInteger('user_id')->after('id')->nullable(); $table->foreign('user_id')->references('id')->on('members'); }); } public function down() { Schema::table('posts', function (Blueprint $table) { $table->dropForeign(['user_id_foreign']); $table->dropColumn('user_id'); }); } }
运行迁移:
php artisan migrate
第二步:创建模型
在
app/Models
目录下创建Member.php
和Post.php
模型文件,内容如下:Member.php
:namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Factories\HasFactory; class Member extends Authenticatable { use HasFactory, Notifiable; protected $fillable = [ 'name', 'email', 'password', // 其他字段... ]; protected $hidden = [ 'password', 'remember_token', ]; public function posts() { return $this->hasMany(Post::class); } }
Post.php
:namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Post extends Model { use HasFactory; protected $fillable = [ 'title', 'content', // 其他字段... ]; public function user() { return $this->belongsTo(Member::class); } }
第三步:创建控制器
创建一个名为
ArticleController.php
的控制器文件,用于处理文章相关操作:namespace App\Http\Controllers; use App\Models\Post; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class ArticleController extends Controller { public function index() { $posts = Post::all(); return view('articles.index', ['posts' => $posts]); } public function store(Request $request) { $validatedData = $request->validate([ 'title' => 'required|string|max:255', 'content' => 'required|string', ]); $post = new Post(); $post->title = $validatedData['title']; $post->content = $validatedData['content']; $post->user_id = Auth::guard('blog')->id(); $post->save(); return redirect('/articles'); } }
第四步:创建视图
在
resources/views/articles
目录下创建index.blade.php
,内容如下:@extends('layouts.app') @section('content') <h1>文章列表</h1> @foreach ($posts as $post) <div> <h2>{{ $post->title }}</h2> <p>创建时间:{{ $post->created_at->format('Y年m月d H:i:s') }}</p> </div> @endforeach @endsection
第五步:定义路由
在
routes/web.php
文件中添加以下路由:Route::get('/articles', [App\Http\Controllers\ArticleController::class, 'index'])->name('articles.index'); Route::post('/articles', [App\Http\Controllers\ArticleController::class, 'store'])->name('articles.store');
第六步:实现登录状态判断与退出功能
在
resources/views/layouts/app.blade.php
中添加导航栏部分,并使用Laravel Blade模板引擎的@auth
和@guest
语句判断用户登录状态:<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm"> <div class="container"> <!-- Brand --> <a class="navbar-brand" href="{{ url('/') }}"> {{ config('app.name', 'Laravel') }} </a> <!-- Toggler/collapsibe button --> <button @click="toggleNavbar" class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <!-- Navbar links --> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <!-- Left Side Links --> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">首页</a> </li> <li class="nav-item"> <a class="nav-link" href="#">添加文章</a> </li> </ul> <!-- Right Side Links --> @auth('blog') <ul class="navbar-nav ms-auto mb-2 mb-lg-0"> <li class="nav-item dropdown"> <a href="#" class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> {{ auth('blog')->user()->nickname ?? '匿名' }} </a> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownMenuLink"> <li><a class="dropdown-item" href="#">个人中心</a></li> <li><hr class="dropdown-divider"></li> <li><a class="dropdown-item" href="{{ route('logout', ['guard' => 'blog']) }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> 退出 </a> <form id="logout-form" action="{{ route('logout', ['guard' => 'blog']) }}" method="POST" style="display: none;"> @csrf </form> </li> </ul> </li> </ul> @else <ul class="navbar-nav ms-auto mb-2 mb-lg-0"> <li class="nav-item"><a class="nav-link" href="{{ route('login', ['guard' => 'blog']) }}">登录</a></li> <li class="nav-item"><a class="nav-link" href="{{ route('register', ['guard' => 'blog']) }}">注册</a></li> </ul> @endauth </div> </div> </nav>
第七步:创建登录和注册视图
在
resources/views/auth
目录下创建login.blade.php
和register.blade.php
,并根据需要配置表单和验证规则。第八步:配置 guards
在
config/auth.php
文件中配置多租户 guards,例如:'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], 'blog' => [ 'driver' => 'session', 'provider' => 'blog-users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'blog-users' => [ 'driver' => 'eloquent', 'model' => App\Models\Member::class, ], ],
这样就完成了所有的要求。记得运行以下命令来清除缓存和重新生成路由:
php artisan cache:clear php artisan route:cache
现在你应该可以在本地服务器上访问
http://127.0.0.1:8000/articles
查看文章列表,并且根据登录状态展示不同的导航栏。解决 无用评论 打赏 举报 编辑记录- 使用Artisan命令行工具来迁移数据库结构。首先创建两个迁移文件,分别用于
悬赏问题
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 在虚拟机环境下完成以下,要求截图!
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图
- ¥15 UE5.1局部变量对蓝图不可见