一、用户认证
1)快速建立注册登录功能
-
导入依赖包:composer require laravel/ui
-
安装部署认证组件:php artisan ui vue --auth
-
安装部署npm组件:npm install && npm run dev
-
命令执行后,自动创建相关视图及相关控制器
2)数据库配置
-
在.env中配置数据库数据
-
修改配置项到终端执行数据库迁移
3)效果演示
- 在浏览器中点击注册、登陆
2. 尝试注册
二、帖子和分类管理
1)创建模型和数据库迁徙文件
- Category是文章的分类。
执行命令:php artisan make:model Category -m
- Post是CMS中后台发布文章帖子。
执行命令:php artisan make:model Post -m
- 两张表结构
①categories_table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCategoriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('categories');
}
}
②posts_table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('description');
$table->text('content');
$table->string('image');
$table->dateTime('published_at')->nullable();
$table->unsignedBigInteger('category_id');
$table->foreign('category_id')->references('id')->on('categories')
->onUpdate('cascade')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
- 迁移文件
执行命令:php artisan migrate
2)创建分类资源
- 创建控制器(CategoriesController举例)
执行命令:php artisan make:controller CategoriesController --resource
- 对应路由
Route::resource(‘categories’,‘CategoriesController’);
三、控制器
1)Category.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $fillable = [ //保护主键
'name'
];
}
2)phpPost.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function category(){
//belongsTo,第一个参数:外键表,第二个:当前表的外键,第三个:外渐表的主键。可以让文章表引入分类表参数
return $this->belongsTo('App\Category','category_id','id');
}
protected $fillable = [
'title','description','content','category_id','published_at'
];
}
3)分类控制器:CategoriesController.php
<?php
namespace App\Http\Controllers;
use App\Category;
use App\Http\Requests\Category\StoreCategory;
use App\Http\Requests\Category\UpdateCategory;
use Exception;
use http\Env\Response;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\View\View;
class CategoriesController extends Controller
{
/**
* Display a listing of the resource.
*
* @return Factory|View
*/
public function index()
{
$categories = Category::query()->orderByDesc('created_at')->get();
return view('categories.index',compact('categories'));
//
}
/**
* Show the form for creating a new resource.
*
* @return Factory|View
*/
public function create()
{
return view('categories.create');
}
/**
* Store a newly created resource in storage.
*
* @param StoreCategory $request
* @return RedirectResponse|Redirector
*/
public function store(StoreCategory $request)
{
$validatedDate = $request->validated();
Category::create($validatedDate);
// Category::create(['name' => $request->get('name')]);
$request->session()->flash('success','创建成功!');
return redirect(route('categories.index'));
}
/**
* Display the specified resource.
*
* @param int $id
* @return void
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param Category $category
* @return Factory|View
*/
public function edit(Category $category)
{
return view( 'categories.create',compact ('category'));
}
/**
* Update the specified resource in storage.
*
* @param UpdateCategory $request
* @param Category $category
* @return RedirectResponse|Redirector
*/
public function update(UpdateCategory $request, Category $category)
{
$category->update($request ->validated());
session()->flash('success','更新成功!');
return redirect(route('categories.index'));
}
/**
* Remove the specified resource from storage.
*
* @param Category $category
* @return RedirectResponse|Redirector
* @throws Exception
*/
public function destroy(Category $category)
{
$category->delete();
session()->flash('success','删除成功!');
return redirect(route('categories.index'));
}
}
4)Posts控制器:PostsController.php
<?php
namespace App\Http\Controllers;
use App\Category;
use App\Post;
use App\posts;
use App\Todo;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Storage;
use Illuminate\View\View;
class PostsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return Factory|View
*/
public function index()
{
$posts = Post::query()->orderByDesc('created_at')->get();
return view('posts.index',compact('posts'));
}