From 108bbf75b08c2ec8adb699cdcb8cc2cdc64b2d0c Mon Sep 17 00:00:00 2001 From: Mischa Braam <19824986+mischabraam@users.noreply.github.com> Date: Thu, 28 Sep 2023 16:24:05 +0200 Subject: [PATCH] Fix magento2 driver (#1420) + simplify, let mode determine by Magento env config --- .../Drivers/Specific/Magento2ValetDriver.php | 118 ++---------------- 1 file changed, 13 insertions(+), 105 deletions(-) diff --git a/cli/Valet/Drivers/Specific/Magento2ValetDriver.php b/cli/Valet/Drivers/Specific/Magento2ValetDriver.php index ad25b67a..3bf799ae 100644 --- a/cli/Valet/Drivers/Specific/Magento2ValetDriver.php +++ b/cli/Valet/Drivers/Specific/Magento2ValetDriver.php @@ -7,16 +7,7 @@ class Magento2ValetDriver extends ValetDriver { /** - * Holds the MAGE_MODE from app/etc/config.php or $ENV. - * - * Can't be correctly typed yet because PHP 7.3. - * - * @param string|null - */ - private $mageMode = null; - - /** - * Determine if the driver serves the request. + * @inheritdoc */ public function serves(string $sitePath, string $siteName, string $uri): bool { @@ -24,44 +15,24 @@ public function serves(string $sitePath, string $siteName, string $uri): bool } /** - * Determine if the incoming request is for a static file. + * @inheritdoc */ public function isStaticFile(string $sitePath, string $siteName, string $uri)/*: string|false */ { - $this->checkMageMode($sitePath); - - $uri = $this->handleForVersions($uri); - $route = parse_url(substr($uri, 1))['path']; - - $pub = ''; - if ($this->mageMode === 'developer') { - $pub = 'pub/'; - } - - if (! $this->isPubDirectory($sitePath, $route, $pub)) { - return false; - } - - $magentoPackagePubDir = $sitePath; - if ($this->mageMode !== 'developer') { - $magentoPackagePubDir .= '/pub'; - } - - $file = $magentoPackagePubDir.'/'.$route; + $uri = preg_replace('/^\/static(\/version[\d]+)/', '/static', $uri); - if (file_exists($file)) { - return $magentoPackagePubDir.$uri; + if (file_exists($staticFilePath = $sitePath . '/pub' . $uri)) { + return $staticFilePath; } - if (strpos($route, $pub.'static/') === 0) { - $route = preg_replace('#'.$pub.'static/#', '', $route, 1); - $_GET['resource'] = $route; - include $magentoPackagePubDir.'/'.$pub.'static.php'; + if (strpos($uri, '/static/') === 0) { + $_GET['resource'] = preg_replace('#static/#', '', $uri, 1); + include($sitePath . '/pub/static.php'); exit; } - if (strpos($route, $pub.'media/') === 0) { - include $magentoPackagePubDir.'/'.$pub.'get.php'; + if (strpos($uri, '/media/') === 0) { + include($sitePath . '/pub/get.php'); exit; } @@ -69,75 +40,12 @@ public function isStaticFile(string $sitePath, string $siteName, string $uri)/*: } /** - * Rewrite URLs that look like "versions12345/" to remove - * the versions12345/ part. - */ - private function handleForVersions($route): string - { - return preg_replace('/version\d*\//', '', $route); - } - - /** - * Determine the current MAGE_MODE. - */ - private function checkMageMode($sitePath): void - { - if ($this->mageMode !== null) { - // We have already figure out mode, no need to check it again - return; - } - - if (! file_exists($sitePath.'/index.php')) { - $this->mageMode = 'production'; // Can't use developer mode without index.php in project root - - return; - } - - $mageConfig = []; - - if (file_exists($sitePath.'/app/etc/env.php')) { - $mageConfig = require $sitePath.'/app/etc/env.php'; - } - - if (array_key_exists('MAGE_MODE', $mageConfig)) { - $this->mageMode = $mageConfig['MAGE_MODE']; - } - } - - /** - * Checks to see if route is referencing any directory inside pub. This is a dynamic check so that if any new - * directories are added to pub this driver will not need to be updated. - */ - private function isPubDirectory($sitePath, $route, $pub = ''): bool - { - $sitePath .= '/pub/'; - $dirs = glob($sitePath.'*', GLOB_ONLYDIR); - - $dirs = str_replace($sitePath, '', $dirs); - - foreach ($dirs as $dir) { - if (strpos($route, $pub.$dir.'/') === 0) { - return true; - } - } - - return false; - } - - /** - * Get the fully resolved path to the application's front controller. + * @inheritdoc */ public function frontControllerPath(string $sitePath, string $siteName, string $uri): ?string { - $this->checkMageMode($sitePath); - - if ($this->mageMode === 'developer') { - $_SERVER['DOCUMENT_ROOT'] = $sitePath; - - return $sitePath.'/index.php'; - } - - $_SERVER['DOCUMENT_ROOT'] = $sitePath.'/pub'; + $_SERVER['SERVER_NAME'] = $_SERVER['HTTP_HOST']; + $_SERVER['DOCUMENT_ROOT'] = $sitePath; return $sitePath.'/pub/index.php'; }