doutou7286
doutou7286
2014-11-22 19:37

Kohana框架级联文件系统。 如何将文件夹添加到此级联链?

已采纳

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条回答

  • duanjiaonie6097 duanjiaonie6097 7年前

    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.

    点赞 评论 复制链接分享