Laravel Ajax 통신으로 Json Array 데이터로 PDF 컨버팅 




* Ajax 준비

<meta name="csrf-token" content="{{ csrf_token() }}">

메타 데이터에 csrf-token 추가(ajax 통신을 위함)

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

- app.js 에 추가를 안해놨다면 사용되는 스크립트에 ajaxSteup 추가


















ajax를 작성한다
- 여기서 중요한점은 파라미터의 구성과 ajax에서 넘겨주는 형식이중요하다.
파라미터가 필자는 반드시 json 형태의 데이터를 사용해야했기때문에 배열안에 json 형태의 데이터를 구성하는 데이터로 만들고 contentType 으로 application/json 형태로 데이터를 넘겨주었다.
contetntType 이있다면 dataType은 없어도 된다. 둘다 같이있다면 콘솔창에서 419 에러를 확인할수 있을것이다.
data는 JSON.stringfy 로 넘겨주어야 한다. 솔직히 잘모르겠다. json 형태로 넘겨주는데도 json을 문자열형식으로 넘겨야하는지는 의문이다.


* Controller


# error_log()  =>를 사용하면 서버 콘솔에서 내용을 확인할수 있다.

$test = json_decode($request->getContent(), ture);
- json 형태로 넘어온데이터중 getContent()로 넘어온 파라미터만 다시 배열형태로 디코딩한다.

$hexname = str_name(hexdec(16)); 
- 임의로 사용할 PDF 이름

$date = date("Y-m-d"); 
- 구분하기위한 오늘날짜

$path ='home/dongeong/다운로드/'
-다운 받을 경로 임의 지정

PDF::setOption(['dpi' => 150, 'defaultFont'=>'NamuGothic']);
- 컨버팅 설정이다 dpi 는 dot per inch 로 인쇄물의 해상도를 말하며 defaultFont 는 기본이되는 글꼴을 의미한다.

if(count($test)== 1) 
- 넘어온 데이터의 수가 1 이라면 단일개의 데이터를 뽑는다.

else if(count($test) > 1)
- 넘어온 데이터의 수가 1 이상이라면 복수개의 데이터를 뽑는다.

return path;
- 어디에 저장됬는지 알려주기 위해서

댓글