@ Flyingmana'nın cevabına dayanarak biraz kazı yaptım ve bir çözüm buldum. Benim için çalışmak için dikiş atıyor.
Önce benim çözümüm, sonra bazı açıklamalar. Magento örneğimin kökünde
bir dosya yarattım 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);
Daha sonra TestApp.php
bu içerikle aynı yerde adı verilen bir dosya oluşturdum .
<?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;
}
}
Şimdi test.php
tarayıcıyı arayabilirim ve TestApp :: launch () içine yerleştirilen her şey çalıştırılacak.
Şimdi, neden bu işe yarıyor: Bootstrap sınıfından gelen
yöntem createApplication
en önemli kısımdır. Bir uygulama sınıfı örneği oluşturur. Yöntem , 2 yöntem içeren createApplication
bir uygulama beklemektedir \Magento\Framework\AppInterface
.
Ben de TestApp
bu arayüzü uygulayan kendi sınıfımı oluşturdum . Uygulamamın istisnaları ele almasını istemediğim için yöntemi her zaman catchException
geri döndürdüm false
. Bir şeyler yanlış olursa, sadece ekrana yazdırın.
Sonra yöntemi uyguladım launch
. buna denir \Magento\Framework\App\Bootstrap::run
. Bu run
yöntem, uygulamanın bir parametre olarak nasıl geçtiği önemli değil, neredeyse aynı şeyi yapıyor.
Uygulamaya bağlı olan tek şey bu satırdır:
$response = $application->launch();
Bu, çağrının \Magento\Framework\App\Bootstrap::run
Magento env'ini başlatacağı anlamına gelir (belki başka çılgınca şeyler de yapabilirim ... henüz her şeyi kontrol etmedim), daha sonra launch
uygulamadan yöntemi çağırır .
Bu nedenle, tüm kirli kodlarınızı bu yöntemin içine koymanız gerekir.
Sonra \Magento\Framework\App\Bootstrap::run
aramaları $response->sendResponse();
nerede $response
budur launch
yöntem döner.
Bu yüzden return $this->_response;
gerekli. Sadece boş bir cevap döndürür.
App sınıfımı genişlettiğim \Magento\Framework\App\Http
için zaten istek ve yanıt parametrelerine (ve diğerlerine) sahip olacağım, ancak sınıfınızın hiçbir şeyi genişletmemesini sağlayabilirsiniz. O zaman yapıcıyı \Magento\Framework\App\Http
sınıftan kopyalamanız gerekir . Belki ihtiyacınız varsa, yapıcıya daha fazla parametre ekleyin.