• L02 Laravel 教程 - Web 开发实战进阶 - 笔记


    创建应用

    创建 LaraBBS 应用

    composer create-project laravel/laravel larabbs --prefer-dist “9.*”

    新增站点

    hosts文件
    127.0.0.1 larabbs.test

    .env 文件

    DB_DATABASE=larabbs

    APP_NAME=LaraBBS
    APP_URL=http://larabbs.test

    getenv(‘APP_NAME’)获取
    env(‘APP_NAME’, ‘Laravel’)

    配置信息

    访问配置值

    config(‘app.timezone’)

    调整配置信息(config/app.php)

    1. 时区
      ‘timezone’ => ‘Asia/Shanghai’,
    2. 默认语言
      ‘locale’ => ‘zh-CN’,

    辅助函数

    自定义辅助函数

    1. touch app/helpers.php
    2. composer.json
    {
     ...
        "autoload": {
            "psr-4": {
                "App\\": "app/",
                "Database\\Factories\\": "database/factories/",
                "Database\\Seeders\\": "database/seeders/"
            },
            "files": [
                "app/helpers.php"
            ]
        },
     ... 
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 修改保存后运行以下命令进行重新加载文件即可
      composer dump-autoload

    首页展示

    创建控制器

    php artisan make:controller PagesController

    
    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    class PagesController extends Controller
    {
     public function root()
     {
     return view('pages.root');
     } }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    绑定路由

    Route::get(‘/’, ‘PagesController@root’)->name(‘root’);
    laravel-8
    取消protected $namespace = ‘App\Http\Controllers’;注释
    laravel-9

    1. 定义此控制器方法的路由
      use App\Http\Controllers\PagesController;
      Route::get(‘/’, [PagesController::class,‘root’])->name(‘root’);
    2. 使用原始方法
      修改App\Providers\RouteServiceProvider
    ...
    	protected $namespace = 'App\\Http\\Controllers';
        public function boot()
        {
            ...
                Route::middleware('web')
                    ->namespace($this->namespace)
                    ->group(base_path('routes/web.php'));
            ...
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    执行数据迁移来创建数据库表结构

    php artisan migrate
    laravel-9

    1. 报错
      SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table users add unique users_email_unique(email))
    2. 解决
    use Illuminate\Support\Facades\Schema;
     
        /**
    * Bootstrap any application services.
    *
    * @return void
    */
    public function boot()
    {
       Schema::defaultStringLength(191);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    验证

    快速验证

        public function root(Request $request)
        {
            try {
                $validated = $request->validate([
                    'title' => 'required|unique:posts|max:255',
                    'body' => 'required',
                ]);
            }catch (Exception $e){
                return $e->getMessage();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    表单请求验证

    1. 创建
      php artisan make:request StorePostRequest
    2. 添加规则
    
    
    namespace App\Http\Requests;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class StorePostRequest extends FormRequest
    {
        public function authorize()
        {
            return true;
        }
        public function rules()
        {
            return [
                'title' => 'required|unique:posts|max:255',
                'body' => 'required',
            ];
        }
        public function messages()
        {
            return [
                'title.required' => '标题不能为空',
                'body.required' => '主体不能为空',
            ];
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    1. 使用
    public function root(StorePostRequest $request)
    {
    }
    
    • 1
    • 2
    • 3
    1. 异常
    
    
    namespace App\Exceptions;
    
    use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
    use Illuminate\Validation\ValidationException;
    use Throwable;
    
    class Handler extends ExceptionHandler
    {
       ...
        public function render($request,Throwable $e)
        {
            if($e instanceof ValidationException){
                $result = [
                    "code"=>400,
                    "msg"=>array_values($e->errors())[0][0],
                ];
                return response()->json($result,400);
            }
    
            return false;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    手动创建

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Validator;
    ...
        public function root(Request $request)
        {
            $validator = Validator::make($request->all(), [
                'captcha' => ['required','min:4']
            ], [
                'captcha.required' => '验证码不能为空',
                'captcha.min' => '验证码不能少于4位'
            ]);
            if ($validator->fails()) {
                return array_values($validator->errors()->toArray())[0][0];
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    自定义验证规则

    1. 创建
      php artisan make:rule Uppercase
    2. 修改
    
    
    namespace App\Rules;
    
    use Illuminate\Contracts\Validation\Rule;
    
    class Uppercase implements Rule
    {
        /**
         * 确定验证规则是否通过。
         *
         * @param  string  $attribute
         * @param  mixed  $value
         * @return bool
         */
        public function passes($attribute, $value)
        {
            return strtoupper($value) === $value;
        }
    
        /**
         * 获取验证错误消息。
         *
         * @return string
         */
        public function message()
        {
            return ':attribute :attribute 需大写';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    1. 使用
      各处rules中
    use App\Rules\Uppercase;
    ...
    'name' => ['required', 'string', new Uppercase],
    ...
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    SpringBoot配置文件(properties、yml、yaml)
    Vue3 - 不再支持 IE11,到底为什么?
    【毕业设计】基于Django的在线考试系统 python
    技术引领未来, IDC TechScape中国数据安全发展路线图首发
    Sulfo-CY3 azide水溶性荧光探针 星戈瑞
    uniapp实现移动端的视频图片轮播组件
    Qt实战 数据统计柱状图显示
    小程序webView页面转发后,进入页面空白
    高仿京东Android App,集成React-Native热更
    【Java】x-easypdf: 一种简单易用的PDF处理库
  • 原文地址:https://blog.csdn.net/m0_37873390/article/details/126279126