[Laavel] Laavel로 할 수 있는 여러 가지 디버깅 방법.

5574 단어 LaravelPHPtech

Laavel의 디버그 도우미


Laavel에 변수 내용을 출력하는 디버그 도우미가 있습니다.
php 표준 출력 방법은 거의 Laavel의 디버그 함수로 대체할 수 있다.
출력이 보기 쉽기 때문에 라벨의 개발에서는 기본적으로 php 표준보다 이걸 사용하는 것이 좋다.
컨트롤러든 모델이든 어디든 쓸 수 있어요.

dump()


php 표준 vardump ()와 같은 출력 변수입니다.
var_dump () 를 더 풍부한 외관으로 출력합니다.

dd()


dump and die의 약칭입니다.
이 함수를 놓아도 처리가 멈춘다는 얘기다.
그래서 여러 곳을 확인할 수 없다.
이렇게 말하지만, 라벨 개발에서 리디렉션을 자주 사용하기 때문에 이 함수에 대한 배려를 많이 받는다.

보충:php 표준 디버깅


이것은 라벨과 무관한 말이다.
변수와 상수의 내용을 확인할 수 있는 php의 표준 함수와 언어 구조가 존재합니다.
echo 문장 또는 print () 함수, vardump () 함수 등.
상술한 dd()와 dump()는 모두 사람들이 쉽게 이해할 수 있도록 확장된 것이다.
dump()의 스타일이 장애가 될 때 사용하는 것이 좋습니다.
echo __LINE__; // 123
$this->publish_year = 2020;
$this->publish_month 3;
$this->publish_day 30;
$data['publish'] = sprintf('%04d-%02d-%02d', $this->publish_year, $this->publish_month, $this->publish_day);
print_r($data['publish']); //2020-03-30
var_dump($data['publish']); // string(10) "2020-03-30" 

tinker


라벨에 표준으로 탑재된 리플입니다.
tinker는 psh의 자물쇠 라이브러리로 Laavel의 사용을 편리하게 하기 위해 확장되었습니다.
코드를 설치하기 전이나 원하는 출력을 실행할 수 없을 때 확인할 수 있습니다.
나는 라벨 개발에서 psh를 직접 사용할 이유가 없다고 생각한다.
tinker도 psh와 완전히 같은 조작 방법을 사용하여 조작할 수 있다.
REPL은 시작 후 콘솔에서 php 코드의 실행 결과를 확인할 수 있는 기능이다.
Read-Eval-Pint Loop의 약칭입니다.
즉, ->평가->를 입력하여 중복적으로 출력하기 때문에 이렇게 부른다.

부팅 방법


터미널에서 다음 명령을 실행합니다.
php artisan tinker
Psy Shell v0.10.12 (PHP 8.0.10 — cli) by Justin Hileman
# Docker環境の場合
sail tinker
Psy Shell v0.10.12 (PHP 8.1.0 — cli) by Justin Hileman

실행


sail tinker
Psy Shell v0.10.12 (PHP 8.1.0 — cli) by Justin Hileman
>>> $a = 1 // 普通の変数の確認
=> 1
>>> ++$a
=> 2
>>> Headline::find(1) // ここからはLaravel特有です。モデルの内容を確認できます。
[!] Aliasing 'Headline' to 'App\Models\Headline' for this Tinker session.
=> App\Models\Headline {#4464
     id: 1,
     flag: 1,
     target: 1,
     publish: "2021-02-23",
     ...
>>> Str::startswith('abcdef', 'abc') // ヘルパーも使えます。
=> true
>>> Str::startswith('abcdef', 'dbc')
=> false

로그 파일


Laavel에는 로그 저장 메커니즘이 있습니다.
출력 위치는 브라우저가 아니라 파일 등 로그로 화면을 더럽히지 않습니다.
dump () 또는 dd () 와 달리 매개 변수에서 그룹이나 대상을 찾을 수 없습니다.
로그에 그룹이나 대상을 보존하려면 printr() 함수를 사용할 수 있습니다.
두 번째 인자를 진짜로 설정하면 문자열을 반환값으로 가져옵니다.
PHP: print_r - Manual
로그는 단계가 있습니다.
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
등급에 대한 상세한 상황은 이번에 설명하지 않았지만, 대체적으로 로그의 출력 목적지를 제어할 것이다.
다음 코드 예제에서는 로그 출력의 Log만 나열합니다. debug().
기본적으로 logs/laavel.log 파일로 출력됩니다.
로그 출력은 config/logging으로 설정됩니다.php로 진행합니다.
예를 들어, Slack에 보낼 수 있습니다.

예제


출력 매개 변수 id
use Illuminate\Support\Facades\Log;

class AnnouncementCcontroller extends Controller
{
    // /admin/announcement/edit/200にアクセス
    public function edit($id)
    {
        Log::debug($id);
/*
laravel.logに以下が出力されます。
[2022-01-16 15:07:10] local.DEBUG: 200 
*/
Eloquent 모델의 내용 내보내기
use Illuminate\Support\Facades\Log;

class HeadlineCcontroller extends Controller
{
    // admin/headline/edit/200にアクセス  
    public function edit($id)
    {
        $headline = Headline::findOrFail($id);
	// モデルオブジェクトはそのまま引数に渡せます。
        Log::debug($headline);
/*
laravel.logに以下が出力されます。
[2022-01-16 15:08:45] local.DEBUG: {"id":200,"flag":1,"target":3,"publish":"2020-03-30",...
*/

Laravel Debugbar


페이지 아래에 디버깅 정보를 표시하는 도구입니다.

다음을 확인할 수 있습니다.
  • 디버그 정보
    \Debugger: debug() 등의 방법으로 변수 등의 내용을 확인할 수 있습니다.
  • 타임라인
  • 예외
  • 출력용 뷰
    routes/web.php나 컨트롤러를 보지 않아도 인용된 보기를 확인할 수 있습니다.
  • 루트 설정(중간부품도 포함)
  • 수행된 쿼리
    조회 확인을 통해 N+1 문제 발송 여부 등 효율성이 떨어지는 조회를 설정할 수 있다.
  • 참조된 모델
  • 세션 개체
  • 요청 대상
  • 차리다


    compooser 명령을 사용하여 설치합니다.
    composer require barryvdh/laravel-debugbar --dev
    
    .env 파일을 편집합니다.
    APP_DEBUG 또는 DEBUGBBARENABLED를 True로 설정합니다.
    APP_DEBUG=true
    
    # APP_DEBUGの設定と、Debugbarの設定を分けたいとき場合にはこちらをtrueに設定。
    DEBUGBAR_ENABLED=true
    

    예제


    emergency에서log까지 모든 단계의 방법이 있습니다.
    따로 사용하면 디버깅 데스크톱의 분류가 쉬워진다.
    \Debugbar::emergency('emergency');
    \Debugbar::alert('alert');
    \Debugbar::critical('critical');
    \Debugbar::error('error');
    \Debugbar::warning('warning');
    \Debugbar::notice('notice');
    \Debugbar::info('info');
    \Debugbar::debug('debug');
    \Debugbar::log('log');
    $inputs = new Headline();
    \Debugbar::log($inputs);
    

    위의 Log fazard 정보는 메시지 탭에도 표시됩니다.

    좋은 웹페이지 즐겨찾기