Skip to content

Commit

Permalink
mvc - replace Phalcon autoloader with simplified version of our own. …
Browse files Browse the repository at this point in the history
  • Loading branch information
AdSchellevis committed May 4, 2024
1 parent ab76fb0 commit 3d71277
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 30 deletions.
20 changes: 8 additions & 12 deletions src/opnsense/mvc/app/config/loader.php
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
<?php

$loader = new \Phalcon\Autoload\Loader();

/**
* We're a registering a set of directories taken from the configuration file
*/
$loader->setDirectories(
array(
$config->application->controllersDir,
$config->application->modelsDir,
$config->application->libraryDir
)
)->register();
require_once (__DIR__ . '/../../app/library/OPNsense/Autoload/Loader.php');
use OPNsense\Autoload\Loader;
$loader_paths = [
$config->application->controllersDir,
$config->application->modelsDir,
$config->application->libraryDir
];
(new Loader($loader_paths))->register();
63 changes: 63 additions & 0 deletions src/opnsense/mvc/app/library/OPNsense/Autoload/Loader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

/*
* Copyright (C) 2024 Deciso B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

namespace OPNsense\Autoload;

class Loader
{
private $probe_dirs = [];
private $is_registered = false;
private $classes_loaded = [];

public function __construct($dirs=null)
{
$this->probe_dirs = $dirs;
}

protected function autoload($className)
{
if (!in_array($className, $this->classes_loaded)) {
$class_path = str_replace("\\", DIRECTORY_SEPARATOR, $className) . '.php';
foreach ($this->probe_dirs as $dirname) {
$dirname = rtrim($dirname, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
if (is_file($dirname . $class_path)) {
require_once($dirname . $class_path);
}
}
$this->classes_loaded[] = $className;
}
}

public function register()
{
if (!$this->is_registered) {
spl_autoload_register([$this, "autoload"],true);
$this->is_registered = true;
}
}
}
27 changes: 9 additions & 18 deletions src/opnsense/mvc/script/load_phalcon.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php

/*
* Copyright (C) 2015 Deciso B.V.
* Copyright (C) 2015-2024 Deciso B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
Expand All @@ -26,20 +26,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/

use Phalcon\Di\FactoryDefault;

$di = new FactoryDefault();
$phalcon_config = include("/usr/local/opnsense/mvc/app/config/config.php");

$loader = new Phalcon\Autoload\Loader();
$loader->setDirectories(
array(
$phalcon_config->application->controllersDir,
$phalcon_config->application->modelsDir,
$phalcon_config->application->libraryDir
)
)->register();

$di->set('config', $phalcon_config);

unset($phalcon_config);
require_once (__DIR__ . '/../app/library/OPNsense/Autoload/Loader.php');
use OPNsense\Autoload\Loader;
$loader_paths = [
$config->application->controllersDir,
$config->application->modelsDir,
$config->application->libraryDir
];
(new Loader($loader_paths))->register();

0 comments on commit 3d71277

Please sign in to comment.