Created
October 24, 2024 17:14
-
-
Save jeremyfelt/92cda99f7671dab47e8ec8dcb34566cf to your computer and use it in GitHub Desktop.
latest local valet driver
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Valet\Drivers\Specific\WordPressValetDriver; | |
/** | |
* Class LocalValetDriver | |
* | |
* This class demonstrates how we might go about proxying any missing local images to a remote host. i.e; the production | |
* site. This has been created with WordPress in mind but could be adjusted to work with any other system. | |
*/ | |
class LocalValetDriver extends WordPressValetDriver { | |
/** @var string The remote host to proxy requests to */ | |
const REMOTE_HOST = 'https://example.org/'; | |
/** @var string If the request URI starts with this, we want to proxy the request to the remote host */ | |
const URI_PREFIX = '/wp-content/uploads/'; | |
/** @var bool Whether or not to load the current request remotely */ | |
private static $tryRemoteFallback = false; | |
/** | |
* This method checks if we have the file on disk. If not, changes the domain of any requests for files within the | |
* uploads directory to the remote domain. It also sets a flag that this request is now a remote request. | |
* | |
* @param string $sitePath | |
* @param string $siteName | |
* @param string $uri | |
* | |
* @return bool|false|string | |
*/ | |
public function isStaticFile( $sitePath, $siteName, $uri ) { | |
$localFileFound = parent::isStaticFile( $sitePath, $siteName, $uri ); | |
if ( $localFileFound ) { | |
return $localFileFound; | |
} | |
if ( self::stringStartsWith( $uri, self::URI_PREFIX ) ) { | |
self::$tryRemoteFallback = true; | |
return rtrim( self::REMOTE_HOST, '/' ) . $uri; | |
} | |
return false; | |
} | |
/** | |
* This method checks if the remote flag is set and, if so, redirects the request by setting the Location header. | |
* | |
* @param string $staticFilePath | |
* @param string $sitePath | |
* @param string $siteName | |
* @param string $uri | |
*/ | |
public function serveStaticFile(string $staticFilePath, string $sitePath, string $siteName, string $uri): void { | |
if ( self::$tryRemoteFallback ) { | |
header( "Location: $staticFilePath" ); | |
} else { | |
parent::serveStaticFile( $staticFilePath, $sitePath, $siteName, $uri ); | |
} | |
} | |
/** | |
* @param string $string | |
* @param string $startsWith | |
* | |
* @return bool | |
*/ | |
private static function stringStartsWith( $string, $startsWith ) { | |
return strpos( $string, $startsWith ) === 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment