标签: autoload

在Rails 3中从lib文件夹加载模块/类的最佳方法?

由于最新的Rails 3版本不再自动加载来自lib的模块和类,加载它们的最佳方法是什么?

来自github:

A few changes were done in this commit:

Do not autoload code in *lib* for applications (now you need to explicitly 
require them). This makes an application behave closer to an engine 
(code in lib is still autoloaded for plugins);
Run Code Online (Sandbox Code Playgroud)

module ruby-on-rails class autoload ruby-on-rails-3

271
推荐指数
9
解决办法
13万
查看次数

什么是自动加载; 你如何使用spl_autoload,__ autoload和spl_autoload_register?

我正在学习高级PHP标准并尝试实现新的有用方法.早些时候我__autoload只是用来逃避包括每页上的多个文件,但最近我看到了一个提示__autoload manual

spl_autoload_register()为自动加载类提供了更灵活的替代方法.因此,不鼓励使用__autoload(),将来可能会弃用或删除.

但我真的无法弄清楚如何实施spl_autoloadspl_autoload_register

php spl autoload

192
推荐指数
2
解决办法
8万
查看次数

Rails 5:在生产中加载lib文件

我已将我的一个应用程序从Rails 4.2.6升级到Rails 5.0.0.该升级指南说,是自动加载功能在生产中默认情况下禁用现在.

现在我总是在生产服务器上出错,因为我在application.rb文件中加载了所有带有自动加载的lib 文件.

module MyApp
    class Application < Rails::Application
        config.autoload_paths += %W( lib/ )
    end
end
Run Code Online (Sandbox Code Playgroud)

现在,我已经设定了config.enable_dependency_loading,true但我想知道是否有更好的解决方案.必须有一个原因,默认情况下在生产中禁用自动加载.

ruby-on-rails autoload ruby-on-rails-5

118
推荐指数
7
解决办法
6万
查看次数

如何在自动加载中使用PHP命名空间?

当我尝试使用自动加载和名称空间时,我收到此错误:

致命错误:类"的Class1"中找不到/usr/local/www/apache22/data/public/php5.3/test.php线10

谁能告诉我我做错了什么?

这是我的代码:

Class1.php:

<?php

namespace Person\Barnes\David
{
    class Class1
    {
        public function __construct()
        {
            echo __CLASS__;
        }
    }
}

?>
Run Code Online (Sandbox Code Playgroud)

test.php的:

<?php

function __autoload($class)
{
    require $class . '.php';
}

use Person\Barnes\David;

$class = new Class1();

?>
Run Code Online (Sandbox Code Playgroud)

php autoload

98
推荐指数
4
解决办法
12万
查看次数

使用Composer的Autoload

我一直在寻找网络,在这个问题上没有运气.我在我的代码中使用了作曲家的自动加载composer.json:

"autoload": {
    "psr-0": {"AppName": "src/"}
}
Run Code Online (Sandbox Code Playgroud)

但是我需要在比供应商文件夹更高的级别进行自动加载.

做这样的事情不起作用:

"autoload": {
    "psr-0": {"AppName": "../src/"}
}
Run Code Online (Sandbox Code Playgroud)

有谁知道修复或我如何做到这一点?

php autoload composer-php

67
推荐指数
4
解决办法
14万
查看次数

使用Composer和autoload.php在PHPUnit中自动加载类

我刚刚通过Composer安装了Sebastian Bergmann的PHPUnit版本3.7.19,并编写了一个我想进行单元测试的课程.

我想让我的所有课程自动加载到每个单元测试中,不必使用includerequire在我的测试的顶部,但这证明是困难的!

这是我的目录结构的样子(尾部/斜杠表示目录,而不是文件):

  • composer.json
  • composer.lock
  • composer.phar
  • LIB /
    • returning.php
  • 测试/
    • returningTest.php
  • 供应商/
    • 斌/
      • PHPUnit的
    • 作曲家/
    • PHPUnit的/
    • symfony的/
    • autoload.php

我的composer.json文件包括以下内容:

"require": {
    "phpunit/phpunit": "3.7.*",
    "phpunit/phpunit-selenium": ">=1.2"
}
Run Code Online (Sandbox Code Playgroud)

我的returns.php类文件包括以下内容:

<?php
class Returning {
    public $var;
    function __construct(){
        $this->var = 1;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

我的returnsTest.php测试文件包括以下内容:

<?php
class ReturningTest extends PHPUnit_Framework_TestCase
{
    protected $obj = null;

    protected function setUp()
    {
        $this->obj = new Returning;
    }

    public function testExample()
    {   
        $this->assertEquals(1, $this->obj->var); …
Run Code Online (Sandbox Code Playgroud)

php phpunit namespaces autoload composer-php

63
推荐指数
4
解决办法
6万
查看次数

为什么不从应用程序/服务Rails自动加载类?

我正在研究Rails 4.2应用程序并刚刚添加app/services/fetch_artists.rb到结构中.在这个文件里面,我已经定义了一个class FetchArtists; end.

试图运行rails r 'FetchArtists'它给我一个NameError: uninitialized constant FetchArtists.

我试过看,ActiveSupport::Dependencies.autoload_paths确实,app/services不存在:

/.../app/assets
/.../app/controllers
/.../app/helpers
/.../app/jobs
/.../app/mailers
/.../app/models
/.../app/controllers/concerns
/.../app/models/concerns
/.../spec/mailers/previews
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么这个文件夹没有自动加载,我该怎么办呢?

编辑

很奇怪,在反复运行上面的命令后rails runner,新文件夹出现在自动加载路径上.我不知道为什么会发生这样的延迟.

有人建议这可以处理spring.我想更多地了解这一点,因为它也可能在这种情况下帮助许多其他人.

ruby-on-rails autoload ruby-on-rails-4.2

51
推荐指数
5
解决办法
2万
查看次数

42
推荐指数
3
解决办法
5万
查看次数

来自不同文件夹的自动加载类

这是我自动加载我controllers文件夹中的所有类的方法,

# auto load controller classes
    function __autoload($class_name) 
    {
        $filename = 'class_'.strtolower($class_name).'.php';
        $file = AP_SITE.'controllers/'.$filename;

        if (file_exists($file) == false)
        {
            return false;
        }
        include ($file);
    }
Run Code Online (Sandbox Code Playgroud)

但我也有models文件夹中的课程,我也想自动加载它们 - 我该怎么办?我应该复制上面的自动加载,只是改变路径models/(但不是重复?)?

谢谢.

编辑:

这些是我在控制器文件夹中的类文件名:

class_controller_base.php
class_factory.php
etc
Run Code Online (Sandbox Code Playgroud)

这些是我在模型文件夹中的类文件名:

class_model_page.php
class_model_parent.php
etc
Run Code Online (Sandbox Code Playgroud)

这就是我通常命名我的控制器类的方法(我使用下划线和低位),

class controller_base 
{
...
}

class controller_factory
{
...
}
Run Code Online (Sandbox Code Playgroud)

这就是我通常命名我的模型类的方法(我使用下划线和lowcaps),

class model_page 
    {
    ...
    }

    class model_parent
    {
    ...
    }
Run Code Online (Sandbox Code Playgroud)

php oop autoload

42
推荐指数
3
解决办法
7万
查看次数

Composer/PSR - 如何自动加载功能?

如何自动加载辅助函数(在任何类之外)?我可以在composer.json某种应该先加载的引导程序文件中指定吗?

autoload psr-0 composer-php

42
推荐指数
2
解决办法
1万
查看次数