相关链接
- 视频教程 https://www.youtube.com/watch?v=XTDNs4TB_lE&list=PL38wFHH4qYZXH8Gb7PIbmyjdsWdEJLImp
- 文档
- TailwindCSS: https://tailwindcss.com/docs/guides/laravel
常用关键标签
blade指令
安装
运行
辅助函数
blade指令
@csrf
form表单里面使用
@yield('main')
占位符
@extends('layout')
继承模板
@section('main')<h1>hello</h1>@endsection
向对应的布局(占位)注入内容
@auth <br> @endauth
用户登录
@guest <h1>guess</h1> @endguest
游客(匿名用户)
artisan 常用命令
# 查看所有的命令
php artisan
# 额外参数 查看命令帮助
-h
# 启动项目
php artisan serve
# 创建组件
php artisan make:component
# 创建匿名组件
--view
# 删除所有的表
php artisan db:wipe
# 执行迁移文件
php artisan migrate
# 覆盖模式
php artisan migrate:fresh
# 回滚
php artisan migrate:rollback
# 创建控制器
php artisan make:controller AuthController
# 为模型生成迁移、种子器、工厂、策略、资源控制器和表单请求类
`php artisan make:model Post -a`
# 数据工厂
php artisan db:seed
校验参数
required
min:1
max:1
重复性校验 注册的时候查看密码是否相同
confirmed
例如 表单字段 password 和 password_confirmation
unique:users
判断表单跟数据库中的字段是否重复
方法
use Illuminate\Support\Facades\Auth;
// 登录 对象
Auth::login($user);
// 登录 用户名和密码 和 记住登录
Auth::attempt($fileds, $request->remember)
// 跳转
redirect()->route('home');
// 跳转到根目录 默认为跳转到根 可以填写对应的数据
redirect()->intended()
// 返回之前的页面 自定义错误信息
back()->withErrors(['failed' => '用户名或者密码错误']);
// 退出登录
public function logout(Request $request)
{
//注销用户
Auth::logout();
// 清除session
$request->session()->invalidate();
// 重新生成token
$request->session()->regenerateToken();
return redirect()->route('home');
}
// 获取时间差
$post->created_at->diffForHumans()
// 对文本进行操作 超过数量的显示省略号
Str::words($post->body, 15)
遇到的各种问题
Laravel中Carbon时间格式本地化(变成中文)
可以在 app/Providers/AppServiceProvider.php 的 boot() 方法中添加下面的代码来设置全局本地化:
public function boot()
{
\Carbon\Carbon::setLocale('zh');
}
设置好后
$article->created_at->diffForHumans();
知识点
安装
直接安装
composer create-project laravel/laravel example-app
全局安装 Laravel Installer 来创建新的 Laravel 项目
composer global require laravel/installer
laravel new example-app
使用 Laravel Installer 来创建新的 Laravel项目
laravel new
# 启动项目
php artisan serve
vscode 扩展
三个vscode扩展
Laravel Blade Snippets
Laravel Extra Intellisense
Laravel Blade formatter
在 blade 文件中 是 @ 来触发快捷提示
使用vite来加速开发
在blade文件中引入vite
// 引入的资源 路径
@vite(['resources/css/app.css', 'resources/js/app.js'])
在项目根目录 使用
# 安装依赖
npm i
# 运行
npm run dev
这个时候修改blade文件后,前端可以主动刷新,不用再手动去刷新查看变化
安装 Tailwind CSS with Laravel
https://tailwindcss.com/docs/guides/laravel
vscode 中安装 Tailwind CSS IntelliSense
扩展
代码提示
# 安装
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
//在tailwind.config.js 修改配置 直接复制粘贴
content: [
"./resources/**/*.blade.php",
"./resources/**/*.js",
"./resources/**/*.vue",
],
/* 在 app.css 文件中 写入 全局的css文件中 */
@tailwind base;
@tailwind components;
@tailwind utilities;
组件
创建匿名组件
php artisan make:component --view
文件路径 会在 components 目录下生成对应的文件匿名组件
还可以自己创建 直接在 components 目录下创建文件
resources\views\components\layout.blade.php
使用匿名组件
用 x-
前缀+组件名
<x-layout></x-layout>
插槽
在组件中使用 {{$slot}}
调用组件 被包裹的内容就会填充到插槽中
<x-layout> 你好 </x-layout>
路由
<?php
use Illuminate\Support\Facades\Route;
// 默认使用的方式
Route::get('/', function () {
return view('posts.index');
})->name('home');
// 直接返回对应的视图
Route::view('/', 'posts.index')->name('home');
// name的作用
// 在视图中用{{route('home')}} 来方便的获取的对应url
{{route('home')}}
// 路由分组
Route::group(function(){});
// 路由重定向
Route::redirect('/', 'posts');
// 资源路由
Route::resource('posts', PostController::class);
表单校验
涉及的知识点
scrf
表单回填
表单校验
校验错误信息展示
// 控制器
<?php
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
// 注册用户
public function register(Request $request)
{
// 校验 返回的数据是通过校验的数据 不包含其他数据
$fileds = $request->validate([
// 'username' => ['required','max:255'],
'username' => 'required|max:255',
'email' => ['required', 'max:255', 'email', 'unique:users'],
'password' => ['required', 'min:3', 'confirmed']
], [
'username.required' => '用户名不能为空',
]);
// 注册 在对应的数据库中创建数据 返回当前创建的对象
$user = User::create($fileds);
// 登录 登录
Auth::login($user);
// 跳转 到首页
return redirect()->route('home');
}
// 用户登录
public function login(Request $request)
{
// 校验
$fileds = $request->validate([
// 'username' => ['required','max:255'],
'email' => ['required', 'max:255', 'email'],
'password' => ['required']
], [
'username.required' => '用户名不能为空',
]);
// dd($request);
// 登录 用户信息 和 记住登录
if (Auth::attempt($fileds, $request->remember)) {
// return redirect()->route('home');
// 默认跳转到根路径
return redirect()->intended();
} else {
// 返回之前的页面 自定义错误信息
return back()->withErrors(['failed' => '用户名或者密码错误']);
}
}
// 退出登录
public function logout(Request $request)
{
//注销用户
Auth::logout();
// 清除session
$request->session()->invalidate();
// 重新生成token
$request->session()->regenerateToken();
return redirect()->route('home');
}
}
<!-- 表单写法 -->
<form action="{{ route('register') }}" method="POST">
@csrf
{{-- 用户 --}}
<div class="mb-4">
<label for="username">用户名</label>
<input type="text" name="username" class="input @error('username') ring-red-600 @enderror"
value="{{ old('username') }}">
@error('username')
<p class="error">{{ $message }}</p>
@enderror
</div>
<div class="mb-4">
<label for="email">邮箱</label>
<input type="text" name="email" class="input @error('email') ring-red-600 @enderror"
value="{{ old('email') }}">
@error('email')
<p class="error">{{ $message }}</p>
@enderror
</div>
<div class="mb-4">
<label for="password">密码</label>
<input type="password" name="password" class="input @error('password') ring-red-600 @enderror"
value="{{ old('password') }}">
@error('password')
<p class="error">{{ $message }}</p>
@enderror
</div>
<div class="mb-4">
<label for="password_confirmation">确认密码</label>
<input type="password" name="password_confirmation"
class="input @error('password') ring-red-600 @enderror" value="{{ old('password_confirmation') }}">
</div>
<button class="btn mb-6">提交</button>
</form>
中间件
控制器中间件
对单独的控制器文件中使用控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controllers\HasMiddleware;
class DashboardController extends Controller implements HasMiddleware
{
/**
* 获取应分配给控制器的中间件。
*/
public static function middleware(): array
{
return [
'auth'
];
}
public function index()
{
return view('users.dashboard');
}
}
路由中间件
// 系统自带的中间件 只能登录的用户会通过
Route::->middleware('auth');
// 只有游客才能通过
Route::->middleware('guest');
// 单独使用
Route::view('/register', 'auth.register')->middleware('guest')->name('register');
// 使用中间件进行分组
Route::middleware('guest')->group(function () {
Route::view('/register', 'auth.register')->name('register');
});
模型
为模型生成迁移、种子器、工厂、策略、资源控制器和表单请求类
php artisan make:model Post -a
数据迁移
强制覆盖
php artisan migrate:fresh
执行迁移文件
php artisan migrate
回滚
php artisan rollback
// 迁移文件里面的代码
Schema::create('posts', function (Blueprint $table) {
$table->id();
// 外键 约束
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->string('title');
$table->text('body');
$table->timestamps();
});
数据工厂 创建数据
命令
php artisan db:seed
<?php
// database\seeders\DatabaseSeeder.php
// 默认会执行这个路径的文件
namespace Database\Seeders;
use App\Models\Post;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
// 创建15个数据
Post::factory(15)->create();
}
}
修改对应的 factories 文件
<?php
// 文件路径
// database\factories\PostFactory.php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class PostFactory extends Factory
{
public function definition(): array
{
return [
'user_id' => 1,
// 15个随机标题
'title' => fake()->sentence(10),
// 20g个随机段落
'body' => fake()->paragraph(20)
];
}
}
分页
控制器代码
// $posts = Post::orderBy('created_at', 'desc')->get();
// 以最新的去排序
$posts = Post::latest()->paginate(6);
return view('posts.index', ['posts' => $posts]);
显示页码数据
<div>
{{ $posts->links() }}
</div>
在 tailwind.config.js 文件中添加 pagination 文件路径 让tailwindcss 识别分页样式
/** @type {import('tailwindcss').Config} */
export default {
content: [
"vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php"
],
theme: {
extend: {},
},
plugins: [],
}
标签:laravel,知识点,posts,required,request,laravel11,artisan,php
From: https://www.cnblogs.com/henordinary/p/18364376