30 self::getBlockVirtualTypesWithDifferentModule();
31 foreach (
Files::init()->getLayoutFiles([],
false) as $file) {
32 $xml = simplexml_load_file($file);
33 $blocks = $xml->xpath(
'//block[@template]') ?: [];
35 foreach ($blocks as
$block) {
36 $fileTemplates[] = [
'class' => (string)
$block[
'class'],
'file' => (
string)
$block[
'template']];
38 if (!empty($fileTemplates)) {
39 self::$templates[$file] = $fileTemplates;
40 $count += count($fileTemplates);
55 foreach (self::$templates as $file =>
$templates) {
57 if (!preg_match(
'/[A-Za-z0-9]_[A-Za-z0-9]+\:\:[A-Za-z0-9\\_\-\.]+/', $templatePair[
'file'])) {
61 $errors[$file][] = $templatePair[
'file'];
63 if (isset(self::$blockVirtualTypes[$templatePair[
'class']])) {
64 $warnings[$file][] = $templatePair;
70 $message =
'Failed to assert that the template reference follows the canonical format ' 71 .
'Vendor' .
'_' .
'Module::path/to/template.phtml. Following files haven\'t pass verification:' 73 foreach (
$errors as $file => $wrongTemplates) {
75 $message .=
'- ' . implode(PHP_EOL .
'- ', $wrongTemplates) . PHP_EOL;
86 private static function getBlockVirtualTypesWithDifferentModule()
88 $virtual = \Magento\Framework\App\Utility\Classes::getVirtualClasses();
89 foreach ($virtual as
$className => $resolvedName) {
90 if (strpos($resolvedName,
'Block') !==
false) {
92 preg_match(
'/([A-Za-z0-9]+\\\\[A-Za-z0-9]+).*/',
$className, $matches);
93 if (count($matches) > 1) {
94 $oldModule = $matches[1];
100 preg_match(
'/([A-Za-z0-9]+\\\\[A-Za-z0-9]+).*/', $resolvedName, $matches);
101 $newModule = $matches[1];
102 if ($oldModule != $newModule) {
103 self::$blockVirtualTypes[
$className] = $resolvedName;
testTemplateFollowsCanonicalName()
static $blockVirtualTypes
static setUpBeforeClass()