Kohana framework-cascade file system. How to add folder to this cascade chain?

329 views Asked by At

How ussualy KO3 works: 1. Get files from "system" 2. Replace some by each used "module" 3. And finally - replace by "application"

What I must todo to add in these chain one more folder folder? How to extend this cascade ? For example I want to load classes like here:

  1. "/system/"
  2. "/modules/"
  3. "/before-plugins/"
  4. "/plugins/"
  5. "/before-application/"
  6. "/application/"

and I want that "plugins" has the same functionality as "modules" To I can initialize each plugin as module, by:

    Kohana::plugins(array(
         'plugin_1'       => PLUGPATH.'plugin_1',       // Plugin 1
         'plugin_2'       => PLUGPATH.'plugin_2',       // Plugin 2
         // and so on
        ));

And what I must to do to create one more looks-like application folder, which will autoloads before application starts? ("/before-application/" and "/before-plugins/")

I know that must put into application/classes/Kohana/Core.php copy from SYSPATH and do something. But what? Help me please!

1

There are 1 answers

0
kero On BEST ANSWER

You actually got it wrong. Kohana::auto_load() uses Kohana::find_file('classes', $file) for your classes. The part that applies here is

foreach (Kohana::$_paths as $dir)
{
    if (is_file($dir.$path))
    {
        // A path has been found
        $found = $dir.$path;

        // Stop searching
        break;
    }
}

and since Kohana::$_paths is

array(11) (
    0 => string(32) "/var/www/guides/3.3/application/"
    1 => string(33) "/var/www/guides/3.3/modules/.../"
    9 => string(38) "/var/www/guides/3.3/modules/.../"
    10 => string(27) "/var/www/guides/3.3/system/"
)

application will be searched first. If nothing is found there, then Kohana will look in modules. And only if there hasn't been an existing class found, the system directory will be looked into.

Now by editing Kohana::$_paths you can easily control the order Kohana uses for autoloading.