diff --git a/composer.json b/composer.json index c9d5cf50..c1e89c74 100755 --- a/composer.json +++ b/composer.json @@ -34,11 +34,10 @@ "atomastic/macroable": "^2.0.0", "atomastic/csrf": "^1.0.1", - "slim/slim": "^3.12.3", + "slim/slim": "^4.8.1", "filp/whoops": "^2.12.1", - "league/glide-slim": "^1.0.0", "league/event": "^2.2.0", "league/glide": "^1.7.0", @@ -48,17 +47,18 @@ "monolog/monolog": "^2.2.0", "cocur/slugify": "^4.0.0", "ramsey/uuid": "^4.1.1", - "symfony/yaml": "^5.2.9", + "symfony/yaml": "^5.3.4", "symfony/finder": "^5.2.9", - "bnf/slim3-psr15": "^1.1.1", - "league/commonmark": "^1.5.8", "thunderer/shortcode": "^0.7.4", "composer/semver": "^3.2.5", - "guzzlehttp/guzzle": "7.3.0" + "slim/psr7": "^1.4", + "php-di/php-di": "^6.3", + "php-di/slim-bridge": "^3.1", + "pimple/pimple": "^3.4" }, "suggest": { "ext-zend-opcache": "Recommended for better performance", @@ -73,7 +73,8 @@ "files": [ "src/flextype/Support/Helpers/FindHelper.php", "src/flextype/Support/Helpers/FilterHelper.php", - "src/flextype/Foundation/Helpers/FlextypeHelper.php" + "src/flextype/Foundation/Helpers/FlextypeHelper.php", + "src/flextype/Foundation/Helpers/ActionsHelper.php" ] }, "require-dev": { diff --git a/index.php b/index.php index b0ac1ede..fa1d97ab 100755 --- a/index.php +++ b/index.php @@ -18,6 +18,191 @@ use function version_compare; use const DIRECTORY_SEPARATOR; use const PHP_VERSION; + +class Debug +{ + /** + * Time + * + * @var array + */ + protected static $time = []; + + /** + * Memory + * + * @var array + */ + protected static $memory = []; + + /** + * Save current time for current point + * + * Debug::elapsedTimeSetPoint('point_name'); + * + * @param string $point_name Point name + */ + public static function elapsedTimeSetPoint(string $point_name) : void + { + Debug::$time[$point_name] = microtime(true); + } + + /** + * Get elapsed time for current point + * + * echo Debug::elapsedTime('point_name'); + * + * @param string $point_name Point name + * @return string + */ + public static function elapsedTime(string $point_name) : string + { + if (isset(Debug::$time[$point_name])) return sprintf("%01.4f", microtime(true) - Debug::$time[$point_name]); + } + + /** + * Save current memory for current point + * + * Debug::memoryUsageSetPoint('point_name'); + * + * @param string $point_name Point name + */ + public static function memoryUsageSetPoint(string $point_name) : void + { + Debug::$memory[$point_name] = memory_get_usage(); + } + + /** + * Get memory usage for current point + * + * echo Debug::memoryUsage('point_name'); + * + * @param string $point_name Point name + * @return string + */ + public static function memoryUsage(string $point_name) : string + { + if (isset(Debug::$memory[$point_name])) { + $unit = array('B', 'KB', 'MB', 'GB', 'TiB', 'PiB'); + $size = memory_get_usage() - Debug::$memory[$point_name]; + $memory_usage = @round($size/pow(1024, ($i=floor(log($size, 1024)))), 2).' '.$unit[($i < 0 ? 0 : $i)]; + return $memory_usage; + } + } + + /** + * Print the variable $data and exit if exit = true + * + * Debug::dump($data); + * + * @param mixed $data Data + * @param bool $exit Exit + */ + public static function dump($data, bool $exit = false) : void + { + echo "
dump \n---------------------- \n\n" . print_r($data, true) . "\n----------------------
"; + if ($exit) exit; + } + + /** + * Prints a list of all currently declared classes. + * + * Debug::classes(); + * + * @access public + * @return string + */ + public static function classes() + { + return Debug::dump(get_declared_classes()); + } + + /** + * Prints a list of all currently declared interfaces. + * + * Debug::interfaces(); + * + * @access public + * @return string + */ + public static function interfaces() + { + return Debug::dump(get_declared_interfaces()); + } + + /** + * Prints a list of all currently included (or required) files. + * + * Debug::includes(); + * + * @access public + * @return string + */ + public static function includes() + { + return Debug::dump(get_included_files()); + } + + /** + * Prints a list of all currently declared functions. + * + * Debug::functions(); + * + * @access public + * @return string + */ + public static function functions() + { + return Debug::dump(get_defined_functions()); + } + + /** + * Prints a list of all currently declared constants. + * + * Debug::constants(); + * + * @access public + * @return string + */ + public static function constants() + { + return Debug::dump(get_defined_constants()); + } + + /** + * Prints a list of all currently loaded PHP extensions. + * + * Debug::extensions(); + * + * @access public + * @return string + */ + public static function extensions() + { + return Debug::dump(get_loaded_extensions()); + } + + /** + * Prints a list of the configuration settings read from php.ini + * + * Debug::phpini(); + * + * @access public + * @return string + */ + public static function phpini() + { + if (!is_readable(get_cfg_var('cfg_file_path'))) { + return false; + } + + return Debug::dump(parse_ini_file(get_cfg_var('cfg_file_path'), true)); + } +} + +Debug::elapsedTimeSetPoint('flextype'); +Debug::memoryUsageSetPoint('flextype'); + /** * Define the application minimum supported PHP version. */ @@ -65,3 +250,9 @@ $flextypeLoader = require_once $flextypeAutoload; * the responses back to the browser and delight our users. */ include __DIR__ . '/src/flextype/flextype.php'; + + +echo "
"; +echo "Time: " . Debug::elapsedTime('flextype'); +echo " Memory: " . Debug::memoryUsage('flextype'); +echo "
"; \ No newline at end of file diff --git a/src/flextype/Foundation/Flextype.php b/src/flextype/Foundation/Flextype.php index fd570cec..8ffe7b4d 100644 --- a/src/flextype/Foundation/Flextype.php +++ b/src/flextype/Foundation/Flextype.php @@ -10,14 +10,26 @@ declare(strict_types=1); namespace Flextype\Foundation; use Exception; -use Psr\Container\ContainerInterface; +use DI\Bridge\Slim\Bridge; +use DI\Container; use Slim\App; -use Slim\Http\Environment; -use Slim\Http\Uri; +use Slim\Middleware\ContentLengthMiddleware; +use Slim\Middleware\OutputBufferingMiddleware; +use Slim\Middleware\RoutingMiddleware; +use Slim\Psr7\Factory\StreamFactory; +use Atomastic\Csrf\Csrf; +use Atomastic\Registry\Registry; +use Atomastic\Session\Session; +use Cocur\Slugify\Slugify; +use DateTimeZone; +use Flextype\Foundation\Actions; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; +use Psr\Container\ContainerInterface; use function is_null; -final class Flextype extends App +final class Flextype { /** * Flextype version @@ -33,6 +45,9 @@ final class Flextype extends App */ private static array $instances = []; + private App $app; + private Container $container; + /** * Flextype should not be cloneable. */ @@ -51,34 +66,28 @@ final class Flextype extends App /** * Flextype construct - * - * @param ContainerInterface|array $container */ - protected function __construct($container = []) + protected function __construct(ContainerInterface $container = null) { - parent::__construct($container); + $this->app = Bridge::create($container); + $this->container = $this->app->getContainer(); } - /** - * Get/Set Dependency Injection Container. - * - * @param string|null $name DI Container name. - */ - public function container(?string $name = null) + public function app() { - if (is_null($name)) { - return self::getInstance()->getContainer(); - } - - return self::getInstance()->getContainer()[$name]; + return $this->app; } + public function container() + { + return $this->container; + } + + /** * Returns Flextype Instance - * - * @param ContainerInterface|array $container Container. */ - public static function getInstance($container = []): Flextype + public static function getInstance(ContainerInterface $container = null): Flextype { $cls = static::class; if (! isset(self::$instances[$cls])) { diff --git a/src/flextype/Foundation/Helpers/FlextypeHelper.php b/src/flextype/Foundation/Helpers/FlextypeHelper.php index a181b567..041e8e4a 100644 --- a/src/flextype/Foundation/Helpers/FlextypeHelper.php +++ b/src/flextype/Foundation/Helpers/FlextypeHelper.php @@ -11,15 +11,10 @@ use Flextype\Foundation\Flextype; if (! function_exists('flextype')) { /** - * Get the available Flextype Application instance - * or try to get Dependency Injection Container if $container is not null. + * Get the available Flextype instance. */ - function flextype($containerName = null, $container = []) + function flextype($container = null) { - if (is_null($containerName)) { - return Flextype::getInstance($container); - } - - return Flextype::getInstance($container)->container($containerName); + return Flextype::getInstance($container); } } diff --git a/src/flextype/flextype.php b/src/flextype/flextype.php index d5a91913..090f7c1c 100755 --- a/src/flextype/flextype.php +++ b/src/flextype/flextype.php @@ -9,464 +9,59 @@ declare(strict_types=1); namespace Flextype; +use Flextype\Foundation\Flextype; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; +use Slim\Factory\AppFactory; +use Slim\Middleware\ContentLengthMiddleware; +use Slim\Middleware\OutputBufferingMiddleware; +use Slim\Middleware\RoutingMiddleware; +use Slim\Psr7\Factory\StreamFactory; use Atomastic\Csrf\Csrf; use Atomastic\Registry\Registry; use Atomastic\Session\Session; -use Bnf\Slim3Psr15\CallableResolver; use Cocur\Slugify\Slugify; use DateTimeZone; -use Flextype\Foundation\Actions; -use Flextype\Foundation\Cors; -use Flextype\Foundation\Content\Content; -use Flextype\Foundation\Flextype; -use Flextype\Foundation\Media\Media; -use Flextype\Foundation\Plugins; -use Flextype\Support\Parsers\Parsers; -use Flextype\Support\Serializers\Serializers; -use Intervention\Image\ImageManager; -use League\Event\Emitter; -use League\Flysystem\Adapter\Local; -use League\Flysystem\Filesystem as Flysystem; -use League\Glide\Api\Api; -use League\Glide\Manipulators\Background; -use League\Glide\Manipulators\Blur; -use League\Glide\Manipulators\Border; -use League\Glide\Manipulators\Brightness; -use League\Glide\Manipulators\Contrast; -use League\Glide\Manipulators\Crop; -use League\Glide\Manipulators\Encode; -use League\Glide\Manipulators\Filter; -use League\Glide\Manipulators\Gamma; -use League\Glide\Manipulators\Orientation; -use League\Glide\Manipulators\Pixelate; -use League\Glide\Manipulators\Sharpen; -use League\Glide\Manipulators\Size; -use League\Glide\Manipulators\Watermark; -use League\Glide\Responses\SlimResponseFactory; -use League\Glide\ServerFactory; -use Monolog\Handler\StreamHandler; -use Monolog\Logger; -use Phpfastcache\Drivers\Apcu\Config; -use Phpfastcache\Helper\Psr16Adapter as Cache; -use Slim\Http\Environment; -use Slim\Http\Uri; -use Whoops\Handler\JsonResponseHandler; -use Whoops\Handler\PrettyPageHandler; -use Whoops\Run; -use Whoops\Util\Misc; -use function date; -use function date_default_timezone_set; -use function error_reporting; -use function extension_loaded; -use function file_exists; -use function flextype; -use function function_exists; -use function get_class; -use function in_array; -use function mb_internal_encoding; -use function mb_language; -use function mb_regex_encoding; -use function str_replace; -use function strings; -use function sys_get_temp_dir; -use function ucwords; +/** + * Get Flextype Instance + */ +$flextype = flextype(); + + +/** + * Set Flextype base path + */ +flextype()->app()->setBasePath('/flextype'); + +flextype()->app()->add(new RoutingMiddleware(flextype()->app()->getRouteResolver(), flextype()->app()->getRouteCollector()->getRouteParser())); +flextype()->app()->add(new ContentLengthMiddleware()); +flextype()->app()->add(new OutputBufferingMiddleware(new StreamFactory(), OutputBufferingMiddleware::APPEND)); /** * Init Registry */ -$registry = Registry::getInstance(); +flextype()->container()->set('registry', registry()); /** * Init Actions */ -$actions = Actions::getInstance(); +flextype()->container()->set('actions', actions()); /** * Preflight the Flextype */ include_once ROOT_DIR . '/src/flextype/preflight.php'; -/** - * Create new Flextype Application - */ -$flextype = Flextype::getInstance([ - 'settings' => [ - 'debug' => $registry->get('flextype.settings.errors.display'), - 'displayErrorDetails' => $registry->get('flextype.settings.display_error_details'), - 'addContentLengthHeader' => $registry->get('flextype.settings.add_content_length_header'), - 'routerCacheFile' => $registry->get('flextype.settings.router_cache_file'), - 'determineRouteBeforeAppMiddleware' => $registry->get('flextype.settings.determine_route_before_app_middleware'), - 'outputBuffering' => $registry->get('flextype.settings.output_buffering'), - 'responseChunkSize' => $registry->get('flextype.settings.response_chunk_size'), - 'httpVersion' => $registry->get('flextype.settings.http_version'), - ], -]); -/** - * Display Errors - */ -if ($registry->get('flextype.settings.errors.display')) { - $environment = new Environment($_SERVER); - $uri = Uri::createFromEnvironment($environment); +flextype()->app()->get('/hello/{name}', function ($name, Request $request, Response $response) { + $response->getBody()->write('Hello' . $name); + return $response; +})->setName('root'); - $prettyPageHandler = new PrettyPageHandler(); +flextype()->app()->getRouteCollector()->setCacheFile(PATH['tmp'] . '/routes.php'); - $prettyPageHandler->setEditor((string) $registry->get('flextype.settings.whoops.editor')); - $prettyPageHandler->setPageTitle((string) $registry->get('flextype.settings.whoops.page_title')); +flextype()->app()->addErrorMiddleware(true, true, true); - $prettyPageHandler->addDataTable('Flextype Application', [ - 'Application Class' => get_class(flextype()), - 'Script Name' => $environment->get('SCRIPT_NAME'), - 'Request URI' => $environment->get('PATH_INFO') ?: '', - ]); - - $prettyPageHandler->addDataTable('Flextype Application (Request)', [ - 'Path' => $uri->getPath(), - 'URL' => (string) $uri, - 'Query String' => $uri->getQuery() ?: '', - 'Scheme' => $uri->getScheme() ?: '', - 'Port' => $uri->getPort() ?: '', - 'Host' => $uri->getHost() ?: '', - ]); - - // Set Whoops to default exception handler - $whoops = new Run(); - $whoops->pushHandler($prettyPageHandler); - - // Enable JsonResponseHandler when request is AJAX - if (Misc::isAjaxRequest()) { - $whoops->pushHandler(new JsonResponseHandler()); - } - - $whoops->register(); - - flextype()->container()['whoops'] = $whoops; -} else { - error_reporting(0); -} - -/** - * Create a standard session hanndler - */ -flextype()->container()['session'] = static fn () => new Session(); - -/** - * Supply a custom callable resolver, which resolves PSR-15 middlewares. - */ -flextype()->container()['callableResolver'] = static fn () => new CallableResolver(flextype()->container()); - -/** - * Add registry service to Flextype container - */ -flextype()->container()['registry'] = $registry; - -/** - * Add actions service to Flextype container - */ -flextype()->container()['actions'] = $actions; - -/** - * Add logger service to Flextype container - */ -flextype()->container()['logger'] = static function () { - $logger = new Logger('flextype'); - $logger->pushHandler(new StreamHandler(PATH['tmp'] . '/logs/' . date('Y-m-d') . '.log')); - - return $logger; -}; - -/** - * Add emitter service to Flextype container - */ -flextype()->container()['emitter'] = static fn () => new Emitter(); - -/** - * Add slugify service to Flextype container - */ -flextype()->container()['slugify'] = static function () { - return new Slugify([ - 'separator' => flextype('registry')->get('flextype.settings.slugify.separator'), - 'lowercase' => flextype('registry')->get('flextype.settings.slugify.lowercase'), - 'trim' => flextype('registry')->get('flextype.settings.slugify.trim'), - 'regexp' => flextype('registry')->get('flextype.settings.slugify.regexp'), - 'lowercase_after_regexp' => flextype('registry')->get('flextype.settings.slugify.lowercase_after_regexp'), - 'strip_tags' => flextype('registry')->get('flextype.settings.slugify.strip_tags'), - ]); -}; - - -flextype()->container()['cache'] = static function () { - $driverName = flextype('registry')->get('flextype.settings.cache.driver'); - - $config = []; - - function getDriverConfig(string $driverName): array - { - $config = []; - - foreach (flextype('registry')->get('flextype.settings.cache.drivers.' . $driverName) as $key => $value) { - if ($key === 'path' && in_array($driverName, ['files', 'sqlite', 'leveldb'])) { - $config['path'] = ! empty($value) ? PATH['tmp'] . '/' . $value : sys_get_temp_dir(); - } else { - $config[strings($key)->camel()->toString()] = $value; - } - } - - return $config; - } - - if (! $driverName || $driverName === 'auto') { - if (extension_loaded('apcu')) { - $driverName = 'apcu'; - } elseif (extension_loaded('wincache')) { - $driverName = 'wincache'; - } else { - $driverName = 'files'; - } - } - - if (flextype('registry')->get('flextype.settings.cache.enabled') === false) { - $driverName = 'devnull'; - } - - switch ($driverName) { - case 'apcu': - $config = new Config(getDriverConfig($driverName)); - break; - case 'cassandra': - $config = new \Phpfastcache\Drivers\Cassandra\Config(getDriverConfig($driverName)); - break; - case 'cookie': - $config = new \Phpfastcache\Drivers\Cookie\Config(getDriverConfig($driverName)); - break; - case 'couchbase': - $config = new \Phpfastcache\Drivers\Couchbase\Config(getDriverConfig($driverName)); - break; - case 'couchdb': - $config = new \Phpfastcache\Drivers\Couchdb\Config(getDriverConfig($driverName)); - break; - case 'devfalse': - $config = new \Phpfastcache\Drivers\Devfalse\Config(getDriverConfig($driverName)); - break; - case 'devnull': - $config = new \Phpfastcache\Drivers\Devnull\Config(getDriverConfig($driverName)); - break; - case 'devtrue': - $config = new \Phpfastcache\Drivers\Devtrue\Config(getDriverConfig($driverName)); - break; - case 'files': - $config = new \Phpfastcache\Drivers\Files\Config(getDriverConfig($driverName)); - break; - case 'leveldb': - $config = new \Phpfastcache\Drivers\Leveldb\Config(getDriverConfig($driverName)); - break; - case 'memcache': - $config = new \Phpfastcache\Drivers\Memcache\Config(getDriverConfig($driverName)); - break; - case 'memcached': - $config = new \Phpfastcache\Drivers\Memcached\Config(getDriverConfig($driverName)); - break; - case 'memstatic': - $config = new \Phpfastcache\Drivers\Memstatic\Config(getDriverConfig($driverName)); - break; - case 'mongodb': - $config = new \Phpfastcache\Drivers\Mongodb\Config(getDriverConfig($driverName)); - break; - case 'predis': - $config = new \Phpfastcache\Drivers\Predis\Config(getDriverConfig($driverName)); - break; - case 'redis': - $config = new \Phpfastcache\Drivers\Redis\Config(getDriverConfig($driverName)); - break; - case 'riak': - $config = new \Phpfastcache\Drivers\Riak\Config(getDriverConfig($driverName)); - break; - case 'sqlite': - $config = new \Phpfastcache\Drivers\Sqlite\Config(getDriverConfig($driverName)); - break; - case 'ssdb': - $config = new \Phpfastcache\Drivers\Ssdb\Config(getDriverConfig($driverName)); - break; - case 'wincache': - $config = new \Phpfastcache\Drivers\Wincache\Config(getDriverConfig($driverName)); - break; - case 'zenddisk': - $config = new \Phpfastcache\Drivers\Zenddisk\Config(getDriverConfig($driverName)); - break; - case 'zendshm': - $config = new \Phpfastcache\Drivers\Zendshm\Config(getDriverConfig($driverName)); - break; - default: - // code... - break; - } - - return new Cache($driverName, $config); -}; - -/** - * Add parsers service to Flextype container - */ -flextype()->container()['parsers'] = static fn () => new Parsers(); - -/** - * Add serializer service to Flextype container - */ -flextype()->container()['serializers'] = static fn () => new Serializers(); - -/** - * Add images service to Flextype container - */ -flextype()->container()['images'] = static function () { - // Get images settings - $imagesSettings = ['driver' => flextype('registry')->get('flextype.settings.media.image.driver')]; - - // Set source filesystem - $source = new Flysystem( - new Local(PATH['project'] . '/media/') - ); - - // Set cache filesystem - $cache = new Flysystem( - new Local(PATH['tmp'] . '/glide') - ); - - // Set watermarks filesystem - $watermarks = new Flysystem( - new Local(PATH['project'] . '/watermarks') - ); - - // Set image manager - $imageManager = new ImageManager($imagesSettings); - - // Set manipulators - $manipulators = [ - new Orientation(), - new Crop(), - new Size(2000 * 2000), - new Brightness(), - new Contrast(), - new Gamma(), - new Sharpen(), - new Filter(), - new Blur(), - new Pixelate(), - new Watermark($watermarks), - new Background(), - new Border(), - new Encode(), - ]; - - // Set API - $api = new Api($imageManager, $manipulators); - - // Setup Glide server - return ServerFactory::create([ - 'source' => $source, - 'cache' => $cache, - 'api' => $api, - 'response' => new SlimResponseFactory(), - ]); -}; - -/** - * Add content service to Flextype container - */ -flextype()->container()['content'] = static fn () => new Content(flextype('registry')->get('flextype.settings.entries.content')); - -/** - * Add media service to Flextype container - */ -flextype()->container()['media'] = static fn () => new Media(); - -/** - * Add plugins service to Flextype container - */ -flextype()->container()['plugins'] = static fn () => new Plugins(); - -/** - * Add cors service to Flextype container - */ -flextype()->container()['cors'] = static fn () => new Cors(); - -/** - * Set session options before you start the session - * Standard PHP session configuration options - * https://secure.php.net/manual/en/session.configuration.php - */ -flextype('session')->setOptions(flextype('registry')->get('flextype.settings.session')); - -/** - * Start the session - */ -flextype('session')->start(); - -/** - * Add CSRF (cross-site request forgery) protection service to Flextype container - */ -flextype()->container()['csrf'] = static fn () => new Csrf('__csrf_token', '', 128); - -/** - * Set internal encoding - */ -function_exists('mb_language') and mb_language('uni'); -function_exists('mb_regex_encoding') and mb_regex_encoding(flextype('registry')->get('flextype.settings.charset')); -function_exists('mb_internal_encoding') and mb_internal_encoding(flextype('registry')->get('flextype.settings.charset')); - -/** - * Set default timezone - */ -if (in_array(flextype('registry')->get('flextype.settings.timezone'), DateTimeZone::listIdentifiers())) { - date_default_timezone_set(flextype('registry')->get('flextype.settings.timezone')); -} - -/** - * Init shortocodes - * - * Load Flextype Shortcodes from directory /flextype/Support/Parsers/Shortcodes/ based on flextype.settings.parsers.shortcode.shortcodes array - */ -$shortcodes = flextype('registry')->get('flextype.settings.parsers.shortcode.shortcodes'); - -foreach ($shortcodes as $shortcodeName => $shortcode) { - $shortcodeFilePath = ROOT_DIR . '/src/flextype/Support/Parsers/Shortcodes/' . str_replace('_', '', ucwords($shortcodeName, '_')) . 'Shortcode.php'; - if (! file_exists($shortcodeFilePath)) { - continue; - } - - include_once $shortcodeFilePath; -} - -/** - * Init plugins - */ -flextype('plugins')->init(); - -/** - * Include API ENDPOINTS - */ -include_once ROOT_DIR . '/src/flextype/Endpoints/Utils/errors.php'; -include_once ROOT_DIR . '/src/flextype/Endpoints/Utils/access.php'; -include_once ROOT_DIR . '/src/flextype/Endpoints/content.php'; -include_once ROOT_DIR . '/src/flextype/Endpoints/registry.php'; -include_once ROOT_DIR . '/src/flextype/Endpoints/media.php'; -include_once ROOT_DIR . '/src/flextype/Endpoints/images.php'; - -/** - * Enable lazy CORS - * - * CORS (Cross-origin resource sharing) allows JavaScript web apps to make HTTP requests to other domains. - * This is important for third party web apps using Flextype, as without CORS, a JavaScript app hosted on example.com - * couldn't access our APIs because they're hosted on another.com which is a different domain. - */ -flextype('cors')->init(); - -/** - * Run high priority event: onFlextypeBeforeRun before Flextype Application starts. - */ -flextype('emitter')->emit('onFlextypeBeforeRun'); - -/** - * Run application - */ -flextype()->run(); +// Run flextype +flextype()->app()->run(); \ No newline at end of file diff --git a/src/flextype/preflight.php b/src/flextype/preflight.php index a722e900..7f19a4ba 100644 --- a/src/flextype/preflight.php +++ b/src/flextype/preflight.php @@ -68,4 +68,4 @@ if (filesystem()->file($preflightFlextypePath . '/' . $cacheID . '.txt')->exists } // Store flextype merged data in the flextype registry. -$registry->set('flextype', $flextypeData); +flextype()->container()->get('registry')->set('flextype', $flextypeData);