laravel5.5의 변경점 비망록 발표 노트

12185 단어 PHPLaravel

노트 를 발행 하다


비공식 문서 (일본어 번역) 발표 노트 등을 보면서 추가한다.
다 보면 힘들기 때문에 신경 쓰이는 것만 발췌한다.

Package Discovery


패키지를 설치하는 데 필요한 config/app.php에 등록할 필요가 없음providers, aliases(포장면composer.json의 설정에 따라)

API Resources


API를 구축할 때 등에서 엘로퀸트와 실제 되돌아오는 json의 차이를 채우는 전환층Resource류로 추가된다.( App\Http\Resources )
구조기로 Eloquent(또는 소장)을 전달하면 $this->id 또는$this->collection 등의 형식으로 모델에 접근할 수 있다.

Validation Rule Objects


이전에는 Validator::extend로 벽장을 추가한 맞춤형 발리
5.5에서 Rule류로 추가할 수 있다.
사용 예
use App\Rules\ValidName;

$this->validate($request, [
    'name' => ['required', new ValidName],
]);

Trusted Proxy Integration


fideloper/TrustedProxy 포장은 5.5에서 App\Http\Middleware\TrustProxies로 묶여 있다.
다음과 같은 이유로 인해 발생하는 것을 방지하는 상태입니다.
로드 밸런서 뒤에 있는 응용 프로그램을 실행하면 응용 프로그램에서 HTTPS 링크를 생성할 수 없습니다.일반적으로, 이것은 응용 프로그램이 포트 80에서 부하 평형기에서 온 업무를 전송했기 때문에, 안전한 링크가 생길 줄 몰랐기 때문이다.
(이건 포장이 있는데.. 눈치채지 못했다)

Renderable & Reportable Exceptions


이전 버전에서는 각각Exception의 처리를 맞춤형으로 하기 위해App\Exceptions\Handler 등 유형 검사를 실시하였다.
5.5곳Exception에서 자체render()report()를 추가할 수 있다.
이전
/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $exception
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $exception)
{
    if ($exception instanceof SpecialException) {
        return response(...);
    }

    return parent::render($request, $exception);
}
5.5
<?php

namespace App\Exceptions;

use Exception;

class SpecialException extends Exception
{
    /**
     * Report the exception.
     *
     * @return void
     */
    public function report()
    {
        //
    }

    /**
     * Report the exception.
     *
     * @param  \Illuminate\Http\Request
     * @return void
     */
    public function render($request)
    {
        return response(...);
    }
}

Request Validation

Illuminate\Http\Request부터 validate()살이 빠졌다.
또한 Request뿐만 아니라 Controllervalidate()의 반환값도 void가 아니며 검증 규칙의 속성only()의 반환값도 반환한다.
Illuminate\Foundation\Providers\FoundationServiceProvider.php
    /**
     * Register the "validate" macro on the request.
     *
     * @return void
     */
    public function registerRequestValidate()
    {
        Request::macro('validate', function (array $rules, ...$params) {
            validator()->validate($this->all(), $rules, ...$params);

            return $this->only(array_keys($rules));
        });
    }
validate()의 반환 값 변경
    public function store(Request $request)
    {
        $validated = $request->([
            'key1' => 'required',
        ]); 

        // $request->all() = ['key1' => 'value1', 'key2' => 'value2']
        // $validated = ['key1' => 'value1']

        //...
    }

Consistent Exception Handling

App\Exceptions\Handler에서 검증 예외 처리를 통일적으로 설정할 수 있다.
기본 형식
    /**
     * Convert a validation exception into a response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Validation\ValidationException  $exception
     * @return \Illuminate\Http\Response
     */
    protected function invalid($request, ValidationException $exception)
    {
        $url = $exception->redirectTo ?? url()->previous();

        return redirect($url)
                ->withInput($request->except($this->dontFlash))
                ->withErrors(
                    $exception->errors(),
                    $exception->errorBag
                );
    }

    /**
     * Convert a validation exception into a JSON response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Validation\ValidationException  $exception
     * @return \Illuminate\Http\JsonResponse
     */
    protected function invalidJson($request, ValidationException $exception)
    {
        return response()->json([
            'message' => $exception->getMessage(),
            'errors' => $exception->errors(),
        ], $exception->status);
    }

Blade Improvements

@if(auth()->check()) ... @else ... @endif 등 조건부는 더욱 선언적으로 진행할 수 있다
AppServiceProvider
/**
 * Perform post-registration booting of services.
 *
 * @return void
 */
public function boot()
{
    Blade::if('env', function ($environment) {
        return app()->environment($environment);
    });
}
blade
@env('local')
    // The application is in the local environment...
@else
    // The application is not in the local environment...
@endenv
이와 함께 사용자의 인증 상태를 확인할 수 있는 새로운 @auth@guest 등의 지침이 추가되었습니다.

좋은 웹페이지 즐겨찾기