首页 > 其他分享 >laravel11知识点

laravel11知识点

时间:2024-08-17 14:49:30浏览次数:9  
标签:laravel 知识点 posts required request laravel11 artisan php

相关链接

常用关键标签

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

alt text

alt text

# 启动项目
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

相关文章

  • go金融系统开发中的关键知识点:确保稳定、安全和高效
    在现代金融系统的开发过程中,涉及的数据处理和业务逻辑异常复杂,要求开发者不仅需要掌握基础的编程技术,还需要理解和应用一些高级的技术和策略。本文将探讨在金融系统开发中需要关注的关键知识点,包括事务管理、流水记录、数据一致性、安全性等方面,帮助你构建稳定、安全且高效的金融......
  • 直播系统源码,异步加载UI相关知识点
    简述FutureBuilder和StreamBuilder都是Flutter为开发者提供快速实现异步加载UI的方案,它们不同的是一个依赖的是Future另一个依赖的是Stream,一般情况下我们使用Future就可以完成大部分的异步操作,它可以异步加载我们需要的数据,那Stream是不是多余的呢?并不是,Stream专门用于异步加......
  • JS中【Object.defineProperties】知识点介绍
    在JavaScript中,Object.defineProperties()是一个非常强大的方法,用来一次性定义或修改一个对象的多个属性的属性描述符。下面是关于Object.defineProperties()的详细讲解。基本语法Object.defineProperties(obj,props)obj:要定义或修改属性的目标对象。props:一个对......
  • JS中【回调函数】知识点讲解
    回调函数(CallbackFunction)是JavaScript中非常重要的概念,尤其是在处理异步操作时广泛使用。回调函数是一种通过参数传递的函数,在特定的操作或事件完成后,由另一个函数调用执行。基本概念函数作为参数:在JavaScript中,函数是一等公民,可以像变量一样传递给其他函数。当......
  • SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结
    目录1、SpringBoot的事务管理2、SpringBoot的异步任务3、SpringBoot定时任务调度4、SpringBoot整合Mail发送邮件5、Spring框架中的Bean的作用域6、Spring框架中的Bean的线程安全7、Spring框架中的Bean生命周期8、Spring框架如何解决循环依赖?9、Spring框架中有哪些注......
  • java中运算符的详细知识点
    算数运算符a++先赋值再加1++a先加1在赋值--的道理是一样的赋值运算符1.=+=-=*=/=%=当=两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则支持连续赋值=+=-=*=/=%=不会改变基础类型测试一下:比较运算符运算结果为布尔类型==!=适......
  • Redis所有知识点(只读这一篇就够了)
    博主制作不易,感谢宝子们支持,有问题可以私我哦!(一)redis开篇(二)缓存穿透(恶意攻击)缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查询数据库缓存空数据解决方案一:缓存空数据,查询返回的数据为空,然后把这个空结果进行缓存......
  • C/C++ 知识点:using 关键字
    文章目录一、using关键字1、命名空间别名和成员访问2、类型别名3、继承中的`using`声明4、模板别名5、模板中的`using`声明6、总结前言:C++中的using关键字是一个功能丰富的工具,它主要用于命名空间、类型别名、继承以及模板编程中。下面将详细介绍using关键字的几......
  • C++部分知识点总结
    动态规划:  01背包(每件物品只有1个)    不装:dp[i][j]=dp[i-1][j]    装: dp[i][j]=max(dp[i][j],dp[i-1][j-w[i]]+c[i])  完全背包    不装:dp[i][j]=dp[i-1][j]    装: dp[i][j]=max(dp[i][j],dp[i][j-w[i]]+c[i])  多重......
  • 操作符详解(内含二进制与原、反、补码知识点)--还有超详细图解!一看就会!
    前言今天给大家分享一下C语言操作符的详解,但在此之前先铺垫一下二进制和进制转换与原码、反码、补码的知识点,都有详细的图解,也希望这篇文章能对大家有所帮助,大家多多支持呀!目录前言一、二进制和进制转换1.  10进制转化为10进制​2.  2进制转化为10进制 ​2.......