【Laravel】초보자의 에러 메모

8000 단어 PHP7Laravel7
최근 라라벨에서 개인개발을 시작했는데, 조금 에러로 빠지는 일이 있었기 때문에 그것을 메모하는 장소입니다.
*환경
XAMPP 7.4.5
PHP 7.4.5
Laravel 7.21.0

array_merge(): Expected parameter 2 to be an array, string given



2020.7.26
"array_merge()의 제 2 인수는 배열이지만 문자열이 들어있어"라는 의미입니다. array_merge() 를 사용하지 않는데 나왔을 때는 view() 의 곳일지도 모릅니다. 두 번째 인수를 잘 연관 배열로 만드는 것을 잊습니다.
<?php
use App\Http\Controllers;
use Illuminate\Http\Request;
use function view;
class LaravelController extends Controller {

    public function post(Request $request) {
        $name = "そらびと";
        //誤
        //return view("laravel", $name);

        //正
        return view("laravel", ['name'=>$name]);
    }
}

htmlspecialchars() expects parameter 1 to be string, array given



2020.7.27
「htmlspecialchars()의 제1 인수는 문자열이지만 배열이 들어 있어」라는 의미입니다. htmlspecialchar() 그렇게 사용하지 않아! 그렇다면 {{$ [변수 이름]}}에 데이터가 제대로 들어 있지 않은 경우가 많습니다.

Target class [...] does not exist.



2020.7.28
· web.xml의 루트 정보 없음
· 두 번째 인수의 문자열이 잘못되었습니다.
· 컨트롤러의 파일 이름이나 클래스 이름이 잘못되었습니다.
· 컨트롤러의 네임 스페이스가 잘못되었습니다.
  어떤 것이 원인입니다. 아직 생각할 수 있는 원인이 있는 것 같습니다만.

include(...): failed to open stream: No such file or directory



2020.7.28
include를 사용하고 있는 파일이라면 그곳을 확인합시다.
"..."곳에 "vendor\composer"가 들어 있는 경우 명령 프롬프트에서composer update시도해보십시오. 그래서 고쳤습니다.

참고 사이트: 【php】 laravel에서 -vendor 이하의 디렉토리를 찾을 수 없을 때

419 Page Expired



2020.7.28
태그를 사용하고 있을 때, @csrf 를 넣어 잊지 않습니까?
*Laravel5.6 이전에는 {{csrf_field()}}가 됩니다.

참고 사이트: 【Laravel5】가끔 나오는 「the page has expired due to inactivity. please refresh and try again」을 표시하지 않는다

403 This action is unauthorized



2020.7.28
명령 프롬프트 등에서php artisan make:request 【クラス名】에서 만든 클래스를 이용하고 있는 경우, authorize()로 false가 반환되어 있는 것이 원인이라고 생각됩니다.

참고 사이트: 【Laravel5.8】FormRequest를 사용하면 This action is unauthorized.

Call to undefined function ...



2020.7.30
【호출자와 다른 클래스의 함수의 경우】
use에서 사용할 함수가 있는 클래스를 지정하는 것을 잊어버린다
· 호출하는 클래스의 네임 스페이스가 잘못되었습니다.
· 함수 이름이 잘못되었습니다.
【호출원과 같은 클래스의 함수의 경우】
· 함수 이름이 잘못되었습니다.
 ・「$this::」를 잊어버린다

SQLSTATE[HY000] [1045] Access denied for user 【데이터베이스명】 (using password: YES) (SQL: select * from sessions where id = 【세션 ID】 limit 1)



2020.8.3
"데이터베이스 연결에 실패한 모양입니다. 설정 파일을 검토합시다. 제 경우에는 .env의 다음 부분을 지웠습니다. (.env는 database.php보다 우선적으로 적용되는 것 같습니다. .env를 설정하고 database.php를 설정하지 않는 손도 OK일지도?)
DB_HOST=...
DB_PORT=...
DB_DATABASE=...
DB_USERNAME=...
DB_PASSWORD=...

대신 config 디렉토리에 있는 database.php에서 다음과 같이 설정합니다. (MySQL의 경우)

database.php
'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '...'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', '...'),
            'username' => env('DB_USERNAME', '...'),
            'password' => env('DB_PASSWORD', '...'),
            //略

이번에, 렌탈 서버로 막힌 것입니다만, 호스트의 곳은 localhost가 아니고 공지된 호스트명을 넣지 않으면 안 된 것 같네요.
↓XServer의 경우의 호스트명. 서버 패널에 로그인하여 "MySQL 설정"페이지 아래쪽에 있습니다.


Creating default object from empty value



2020.8.8
  Eloquent로 SQL 발행해 조작했을 때에 나오는 일이 있습니다. 이 경우 사용하려는 모델 클래스의 유형을 잘못했거나 변수를 잘못하고 있습니까?
$items = new Items();

//誤
$guests->id = $request->id;
//正
$items->id = $request->id;

2020.8.23 추가
조건에 사용하는 값이 null가 되어 있는 등의 이유로 SQL로 검색해도 결과가 0건이 되어도 발생하는 일이 있습니다. SQL도 확인해 봅시다.

SQLSTATE[HY000]: General error: 1364 Field 'updated_at' doesn't have a default value (SQL:[SQL 문])



2020.8.12
"updated_at는 필수이지만 하늘에서 등록하려고 하고 있어"라는 의미가 됩니다. null 금지의 컬럼에 값을 넣어 잊지 않았는지 체크입니다.
섹션에 쓰는 것처럼 오류 메시지에 'updated_at'이 들어 있으면 모델 클래스의 다음 문장으로 인해 발생합니다. 제거하면 해결됩니다.public $timestamps = false;

좋은 웹페이지 즐겨찾기