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. 修改保存后运行以下命令进行重新加载文件即可
    composer dump-autoload

首页展示

创建控制器

php artisan make:controller PagesController

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PagesController extends Controller
{
 public function root()
 {
 return view('pages.root');
 } }

绑定路由

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'));
        ...
    }

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

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);
}

验证

快速验证

    public function root(Request $request)
    {
        try {
            $validated = $request->validate([
                'title' => 'required|unique:posts|max:255',
                'body' => 'required',
            ]);
        }catch (Exception $e){
            return $e->getMessage();
        }
    }

表单请求验证

  1. 创建
    php artisan make:request StorePostRequest
  2. 添加规则
<?php

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. 使用
public function root(StorePostRequest $request)
{
}
  1. 异常
<?php

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;
    }
}

手动创建

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. 创建
    php artisan make:rule Uppercase
  2. 修改
<?php

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. 使用
    各处rules中
use App\Rules\Uppercase;
...
'name' => ['required', 'string', new Uppercase],
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值