This is an updated version of Prestashop Laravel Valet driver compatible with Laravel Valet 4.1.2.
- Laravel Valet 4.X (tested on 4.1.2)
- Prestashop 8.X (tested on 8.0.2)
Copy & Paste within ~/.config/valet/Drivers
| <?php | |
| namespace Valet\Drivers\Custom; | |
| use Valet\Drivers\ValetDriver; | |
| class PrestaShopValetDriver extends ValetDriver | |
| { | |
| public static $ps_exclusions = ['ajax.php', 'dialog.php', 'ajax_products_list.php', 'autoupgrade/', 'filemanager/']; | |
| /** | |
| * Determine if the driver serves the request. | |
| * | |
| * @param string $sitePath | |
| * @param string $siteName | |
| * @param string $uri | |
| * | |
| * @return bool | |
| */ | |
| public function serves(string $sitePath, string $siteName, string $uri): bool | |
| { | |
| if (self::isPrestashop($sitePath) && self::stringContains($uri, self::$ps_exclusions)) { | |
| return false; | |
| } elseif (self::isPrestashop($sitePath)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| /** | |
| * Determine if is prestashop. | |
| * | |
| * @param $sitePath | |
| * | |
| * @return bool | |
| */ | |
| public static function isPrestashop($sitePath) | |
| { | |
| return file_exists($sitePath.'/classes/PrestashopAutoload.php'); | |
| } | |
| /** | |
| * Check if string contains a string. | |
| * | |
| * @param $string | |
| * @param $doesContains | |
| * | |
| * @return bool | |
| */ | |
| public static function stringContains($string, $doesContains = null) | |
| { | |
| if (is_array($doesContains)) { | |
| foreach ($doesContains as $doesContain) { | |
| if (self::stringContains($string, $doesContain)) { | |
| return true; | |
| } | |
| } | |
| } else { | |
| if (strpos($string, $doesContains) !== false) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| /** | |
| * Determine if the incoming request is for a static file. | |
| * | |
| * @param string $sitePath | |
| * @param string $siteName | |
| * @param string $uri | |
| * | |
| * @return string|false | |
| */ | |
| public function isStaticFile(string $sitePath, string $siteName, string $uri)/*: string|false */ | |
| { | |
| if (is_file($staticFilePath = "{$sitePath}/{$uri}")) { | |
| return $staticFilePath; | |
| } | |
| // rewrite ^/c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ /img/c/$1$2$3.jpg last; | |
| if (preg_match('/c\/([a-zA-Z_-]+)(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/c/{$matches[1]}{$matches[2]}{$matches[3]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/$1$2.jpg last; | |
| if (preg_match('/c\/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/c/{$matches[1]}{$matches[2]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last; | |
| if (preg_match('/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[2]}/{$matches[3]}/{$matches[4]}/{$matches[5]}/{$matches[6]}/{$matches[7]}/{$matches[8]}/{$matches[1]}{$matches[2]}{$matches[3]}{$matches[4]}{$matches[5]}{$matches[6]}{$matches[7]}{$matches[8]}{$matches[9]}{$matches[10]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last; | |
| if (preg_match('/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[2]}/{$matches[3]}/{$matches[4]}/{$matches[5]}/{$matches[6]}/{$matches[7]}/{$matches[1]}{$matches[2]}{$matches[3]}{$matches[4]}{$matches[5]}{$matches[6]}{$matches[7]}{$matches[8]}{$matches[9]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last; | |
| if (preg_match('/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[2]}/{$matches[3]}/{$matches[4]}/{$matches[5]}/{$matches[6]}/{$matches[1]}{$matches[2]}{$matches[3]}{$matches[4]}{$matches[5]}{$matches[6]}{$matches[7]}{$matches[8]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last; | |
| if (preg_match('/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[2]}/{$matches[3]}/{$matches[4]}/{$matches[5]}/{$matches[1]}{$matches[2]}{$matches[3]}{$matches[4]}{$matches[5]}{$matches[6]}{$matches[7]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last; | |
| if (preg_match('/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[2]}/{$matches[3]}/{$matches[4]}/{$matches[1]}{$matches[2]}{$matches[3]}{$matches[4]}{$matches[5]}{$matches[6]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last; | |
| if (preg_match('/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[2]}/{$matches[3]}/{$matches[1]}{$matches[2]}{$matches[3]}{$matches[4]}{$matches[5]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last; | |
| if (preg_match('/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[2]}/{$matches[1]}{$matches[2]}{$matches[3]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| // rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$1$2$3.jpg last; | |
| if (preg_match('/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?\/.+\.(jpg|webp)/i', $uri, $matches)) { | |
| if (is_file($staticFilePath = "{$sitePath}/img/p/{$matches[1]}/{$matches[1]}{$matches[2]}{$matches[3]}.jpg")) { | |
| return $staticFilePath; | |
| } | |
| } | |
| return false; | |
| } | |
| /** | |
| * Get the fully resolved path to the application's front controller. | |
| * | |
| * @param string $sitePath | |
| * @param string $siteName | |
| * @param string $uri | |
| * | |
| * @return string | |
| */ | |
| public function frontControllerPath(string $sitePath, string $siteName, string $uri): string | |
| { | |
| $parts = explode('/', $uri); | |
| if (!self::stringContains($uri, self::$ps_exclusions) && is_file($sitePath.$uri) && file_exists($sitePath.$uri)) { | |
| $_SERVER['SCRIPT_FILENAME'] = $sitePath.$uri; | |
| return $sitePath.$uri; | |
| } | |
| if (isset($parts[1]) && $parts[1] != '' && file_exists($adminIdex = $sitePath.'/'.$parts[1].'/index.php')) { | |
| $_SERVER['SCRIPT_FILENAME'] = $adminIdex; | |
| $_SERVER['SCRIPT_NAME'] = '/'.$parts[1].'/index.php'; | |
| if (isset($_GET['controller']) || isset($_GET['tab'])) { | |
| return $adminIdex; | |
| } | |
| return $adminIdex; | |
| } | |
| $_SERVER['SCRIPT_NAME'] = '/index.php'; | |
| $_SERVER['SCRIPT_FILENAME'] = $sitePath.'/index.php'; | |
| return $sitePath.'/index.php'; | |
| } | |
| } |