mirror of
https://github.com/laravel/valet.git
synced 2026-02-05 08:30:07 +01:00
Add Magento2 driver
This commit is contained in:
committed by
Adam Wathan
parent
4743c118d6
commit
953d828afd
139
cli/drivers/Magento2ValetDriver.php
Normal file
139
cli/drivers/Magento2ValetDriver.php
Normal file
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
class Magento2ValetDriver extends ValetDriver
|
||||
{
|
||||
|
||||
/**
|
||||
* Holds the MAGE_MODE from app/etc/config.php or $ENV
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $mageMode;
|
||||
|
||||
/**
|
||||
* Determine if the driver serves the request.
|
||||
*
|
||||
* @param string $sitePath
|
||||
* @param string $siteName
|
||||
* @param string $uri
|
||||
* @return boolean
|
||||
*/
|
||||
public function serves($sitePath, $siteName, $uri)
|
||||
{
|
||||
return file_exists($sitePath . '/bin/magento') && file_exists($sitePath . '/pub/index.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* 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($sitePath, $siteName, $uri)
|
||||
{
|
||||
$this->checkMageMode($sitePath);
|
||||
|
||||
$route = parse_url(substr($uri, 1))['path'];
|
||||
|
||||
$pub = '';
|
||||
if ('developer' === $this->mageMode) {
|
||||
$pub = 'pub/';
|
||||
}
|
||||
|
||||
if (!$this->isPubDirectory($sitePath, $route, $pub)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$magentoPackagePubDir = $sitePath;
|
||||
if ('developer' !== $this->mageMode) {
|
||||
$magentoPackagePubDir .= '/pub';
|
||||
}
|
||||
|
||||
$file = $magentoPackagePubDir . '/' . $route;
|
||||
|
||||
if (file_exists($file)) {
|
||||
return $magentoPackagePubDir . $uri;
|
||||
}
|
||||
|
||||
if (strpos($route, $pub . 'static/') === 0) {
|
||||
$route = preg_replace('#' . $pub . 'static/#', '', $route, 1);
|
||||
$_GET['resource'] = $route;
|
||||
include $magentoPackagePubDir . '/' . $pub . 'static.php';
|
||||
exit;
|
||||
}
|
||||
|
||||
if (strpos($route, $pub . 'media/') === 0) {
|
||||
include $magentoPackagePubDir . '/' . $pub . 'get.php';
|
||||
exit;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the current MAGE_MODE
|
||||
*
|
||||
* @param string $sitePath
|
||||
*/
|
||||
private function checkMageMode($sitePath)
|
||||
{
|
||||
if (null !== $this->mageMode) {
|
||||
// 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.
|
||||
*
|
||||
* @param string $sitePath
|
||||
* @param string $route
|
||||
* @param string $pub
|
||||
* @return bool
|
||||
*/
|
||||
private function isPubDirectory($sitePath, $route, $pub = '')
|
||||
{
|
||||
$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.
|
||||
*
|
||||
* @param string $sitePath
|
||||
* @param string $siteName
|
||||
* @param string $uri
|
||||
* @return string
|
||||
*/
|
||||
public function frontControllerPath($sitePath, $siteName, $uri)
|
||||
{
|
||||
$this->checkMageMode($sitePath);
|
||||
|
||||
if ('developer' === $this->mageMode) {
|
||||
return $sitePath . '/index.php';
|
||||
}
|
||||
return $sitePath . '/pub/index.php';
|
||||
}
|
||||
}
|
||||
@@ -67,6 +67,7 @@ public static function assign($sitePath, $siteName, $uri)
|
||||
$drivers[] = 'JoomlaValetDriver';
|
||||
$drivers[] = 'DrupalValetDriver';
|
||||
$drivers[] = 'Concrete5ValetDriver';
|
||||
$drivers[] = 'Magento2ValetDriver';
|
||||
|
||||
$drivers[] = 'BasicValetDriver';
|
||||
|
||||
|
||||
@@ -25,3 +25,4 @@
|
||||
require_once __DIR__.'/JoomlaValetDriver.php';
|
||||
require_once __DIR__.'/DrupalValetDriver.php';
|
||||
require_once __DIR__.'/Concrete5ValetDriver.php';
|
||||
require_once __DIR__.'/Magento2ValetDriver.php';
|
||||
|
||||
Reference in New Issue
Block a user