@ Flyingmana의 대답을 바탕으로 약간 파고 솔루션을 생각해 냈습니다. 나를 위해 일하는 것은 이음새입니다.
먼저 내 해결책과 설명이 있습니다. 내 magento 인스턴스의 루트에
있는 파일을 만들었습니다 test.php
.
<?php
require __DIR__ . '/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('TestApp');
$bootstrap->run($app);
그런 다음 TestApp.php
이 내용으로 같은 장소에서 파일을 만들었습니다 .
<?php
class TestApp
extends \Magento\Framework\App\Http
implements \Magento\Framework\AppInterface {
public function launch()
{
//dirty code goes here.
//the example below just prints a class name
echo get_class($this->_objectManager->create('\Magento\Catalog\Model\Category'));
//the method must end with this line
return $this->_response;
}
public function catchException(\Magento\Framework\App\Bootstrap $bootstrap, \Exception $exception)
{
return false;
}
}
이제 test.php
브라우저에서 호출 하면 TestApp :: launch ()에 배치 된 모든 것이 실행됩니다.
이제 이것이 작동하는 이유 : 부트 스트랩 클래스
의 메소드 createApplication
가 가장 중요한 부분입니다. 응용 프로그램 클래스의 인스턴스를 만듭니다. 이 메소드 createApplication
는 \Magento\Framework\AppInterface
2 가지 메소드를 포함 하는 구현을 예상합니다 .
그래서 TestApp
그 인터페이스를 구현하는 클래스를 만들었습니다 . 내 앱이 예외를 처리하지 않기 때문에 메소드가 항상 catchException
반환 false
되도록했습니다. 문제가있는 경우 화면에 인쇄하십시오.
그런 다음 방법을 구현했습니다 launch
. 이것에 의해 호출됩니다 \Magento\Framework\App\Bootstrap::run
. 이 run
방법은 응용 프로그램이 매개 변수로 전달한 것이 무엇이든 거의 동일합니다.
응용 프로그램에 의존하는 유일한 것은이 줄입니다.
$response = $application->launch();
이것은 호출 \Magento\Framework\App\Bootstrap::run
이 Magento env를 초기화하고 (아마도 다른 미친 것들을 할 수 있습니다 ... 아직 모든 것을 확인하지는 않았습니다) launch
응용 프로그램 에서 메소드 를 호출합니다 .
그래서 모든 더러운 코드를 해당 메소드에 넣어야합니다.
그런 다음 \Magento\Framework\App\Bootstrap::run
호출은 $response->sendResponse();
어디에서 $response
무엇 인 launch
방법으로 돌아갑니다.
이것이 return $this->_response;
필요한 이유 입니다. 빈 응답 만 반환합니다.
내 응용 프로그램 클래스를 확장 \Magento\Framework\App\Http
하여 이미 요청 및 응답 매개 변수 (및 기타 매개 변수)를 갖지만 클래스를 아무것도 확장하지 못하게 할 수 있습니다. 그런 다음 생성자를 \Magento\Framework\App\Http
클래스 에서 복사해야합니다 . 필요할 경우 생성자에 더 많은 매개 변수를 추가 할 수 있습니다.