Magento'nun bin/magento
çalıştırılabilir özelliği sadece bir Symfony Console bileşenidir. Bu, tek bir komut için ayrı ayrı dosyayı bulabileceğiniz anlamına gelir. Adlandırma her zaman kurulum için aynıdır: di: compile DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
) öğesini bulabilirsiniz .
Her zaman exeucte()
yöntemi çalıştırır, bu yüzden bakmamız gereken yer orasıdır. Bu işlevde, yöntem $operations
tarafından doldurulan bir var ayarlanmış olduğunu göreceksiniz getOperationsConfiguration()
. Bu yöntem temel olarak DiCompileCommand öğesinde ne derleneceğini bildirir.
Denedim ilk şey sadece uygulama kodu üreteci kısmını geri döndürmek;
private function getOperationsConfiguration(
array $compiledPathsList
) {
$excludePatterns = [];
foreach ($this->excludedPathsList as $excludedPaths) {
$excludePatterns = array_merge($excludedPaths, $excludePatterns);
}
return [
OperationFactory::APPLICATION_CODE_GENERATOR => [
'paths' => [
$compiledPathsList['application'],
$compiledPathsList['library'],
$compiledPathsList['generated_helpers'],
],
'filePatterns' => ['php' => '/\.php$/'],
'excludePatterns' => $excludePatterns,
]
];
}
Bu oldukça iyi gitti, derleme zamanı önemli ölçüde kesildi;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Aksine;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Elbette, bu beklenen bir şeyleri kestiğimizden beri bekleniyordu. Ama belirtmedi hangi dosyaları oluşturmak istediğinizi . Örneğin, Interception sınıfları birden fazla modüle bağlı olabileceğinden ve bunu yalnızca bir modül için çalıştırırsanız, size sınırlı bir işlevsellik çıktısı vereceğinden, her dosya modül başına oluşturulamaz.
Sorumlu jeneratörleri burada bulabilirsiniz;
setup / src / Magento / Kurulum / Modül / Di / Uygulama / Görev / Operasyon /
Her sınıfın içinde bir foreach vardır; bu, belirli modülleri / yolları atlamaya devam eden bir if / else eklemenizi sağlar. Belki Symfony Konsol Bileşen Girdi Argümanları belgelerini komuta argümanların nasıl besleneceğine dair kontrol etmek yararlı olacaktır .