2017-04-17 4 views
0

내 응용 프로그램에 CakePHP 3.4 프레임 워크를 사용하고 생성자에 endroid/qrcode을 사용하고 있습니다.PHP qr 코드가 올바르게 표시되지 않습니다.

이 문제가 될 수 무엇 컨트롤러에서 나는

use Endroid\QrCode\QrCode; 

$qrCode = new QrCode(); 
$qrCode 
    ->setText('Life is too short to be generating QR codes') 
    ->setSize(300) 
    ->setPadding(10) 
    ->setErrorCorrection('high') 
    ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0)) 
    ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0)) 
    ->setLabel('Scan the code') 
    ->setLabelFontSize(16) 
    ->setImageType(QrCode::IMAGE_TYPE_PNG) 
; 
$this->set(compact('qrCode')); 

header('Content-Type: '.$qrCode->getContentType()); 
$qrCode->render(); ?> 

에서

을 사용했다하지만이

enter image description here

로 렌더링, 그것은 아니다 qr 이미지를 보여주는가?

+0

이미지 만 렌더링 하시겠습니까? 그렇다면 Response 개체를 사용하여 컨트롤러에서 이미지를 반환해야합니다. – chrisShick

+0

문서 작성자 오류 '응답 클래스를 찾을 수 없음'에 따라 응답 생성 –

답변

1

컨트롤러 메서드가 QR 코드 이미지 만 반환하는 경우 컨트롤러에 다음 코드를 추가하면됩니다.

편집 : 사용중인 라이브러리의 문서를 선택했습니다. 문서 당 Writer을 사용해야합니다. 읽어주십시오. 테스트되지 않은 : 그것은 컨트롤러 작업이기 때문에보기

use Endroid\QrCode\QrCode; 
use Endroid\QrCode\Writer\PngWriter; 
... 
$response = $this->response; 

$response = $response->withType($qrCode->getContentType(PngWriter::class)) 
    ->withStringBody($qrCode->writeString(PngWriter::class)); 

// Return response object – you won't have to have a View for this method 
return $response; 

// $this->set(...) from your code is obsolete 

보내기 헤더가 잘못된 것 같습니다.

편집 : 그런 다음 컨트롤러 방법을 이미지 소스로 사용할 수 있습니다. E :

<img src="/path/to/your/controller/action" alt="QR Code here"> 

당신은 QR 코드이 방법의보기 안에 표시하는 대신 이미지를 반환하려는 경우, 당신은 할 수 중 하나

A)와 같은 파일 시스템에 생성 된 QR 코드를 쓰기 이미지 파일

Response 개체를 반환하는 대신 라이브러리의 Endroid\QrCode\QrCode::writeFile() 메서드를 사용하십시오. 문서 도구에 작성된

b)는 당신도 Docs을 읽으면

$writer = new DataUriWriter($qrCode); 
$dataUri = $writer->writeString(); 

정말 궁금 데이터 URI를 사용합니다.

+0

'withStringBody()';-) – ndm

+0

고마워요 @ndm -이 사실을 알지 못했습니다. ;) – Mary

+0

Thanks @Mary 당신이 말했듯이, 나는이 방법에 대한 견해를 가질 필요가 없다. 그러나보기에 대해서만 QR을 표시하려고합니다. 즉, qrcode.ctp 뷰와'qrcode()'응답에서'qrcode()'를 호출하면 응답이 생성된다. –