怀旧@? 2024-04-20 16:20 采纳率: 0%
浏览 4

php这个样式谁会做,不知道做

img

img

1.修改member表,增加字段remember_token,字段类型为varchar 长度100,允许为空;修改post表,增加user_id字段,保存发布文章的用户的id。2.为member表创建对应的模型类注意:模型类的初始化设置3.为post表创建对应的模型类注意:模型类根据对应数据表的初始化设置4.通过post的模型类实现文章的添加功能注意:需要通过Auth类获取登录用户的id一并添加到数据库中。Auth::guard(‘blog’)->id()获取登录用户的id5.制作首页效果参考如下图:查询所有文章信息,将文章的标题和发布时间输出到页面

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-20 16:20
    关注

    引自免费微信小程序:皆我百晓生

    为了帮助您解决这个问题,我会分步骤地解释如何完成每个任务,并提供相应的代码示例。这里假设您正在使用 Laravel 框架。

    首先确保您的环境已经安装了Laravel,如果没有,请按照官方文档进行安装:https://laravel.com/docs/8.x/installation

    第一步:修改数据库

    1. 使用Artisan命令行工具来迁移数据库结构。首先创建两个迁移文件,分别用于memberpost表:
    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.phpPost.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.phpregister.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查看文章列表,并且根据登录状态展示不同的导航栏。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月20日

悬赏问题

  • ¥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局部变量对蓝图不可见