标签: autoloader

如何在Rails 3中列出所有自动加载路径

如何列出Rails 3中的所有自动加载路径?

在Rails控制台中,当我这样做时,它只列出添加到配置的自定义路径:

$ rails c
Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > MyRailsApp::Application.config.autoload_paths
=> [] 
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails autoload autoloader ruby-on-rails-3

9
推荐指数
2
解决办法
8647
查看次数

如何修复作曲家post-install-cmd脚本的错误?

我想使用composer脚本进行一些安装后的操作,例如将文件从bootstrap vendor文件夹复制到我的Web应用程序公用文件夹.我有PHP世界和Web应用程序开发的宝贝经验.

我正在尝试通过遵循本教程学习一点

这是我的目录结构* 在此输入图像描述

这是我的composer.json

{
    "name": "Composer Script",
    "description": "An example to demonstrate the use of Composer scripts",
    "version": "1.0.0",
    "require": {
        "twitter/bootstrap": ">=3.0"
    },

    "scripts": {
        "post-install-cmd": [
            "ComposerScript\\Installer::postInstall"
        ],
        "post-package-install": [
            "/var/www/test/composer-script/install.sh"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

这是ComposerScript\Installer.php

class Installer

    {
        public static function postInstall(Event $event)
        {
            $composer = $event->getComposer();
            // do stuff
        }

        public static function postPackageInstall(Event $event)
        {
            $installedPackage = $event->getOperation()->getPackage();
            // do stuff
        }

        public static function warmCache(Event $event)
        {
            // …
Run Code Online (Sandbox Code Playgroud)

php autoloader composer-php

9
推荐指数
1
解决办法
9816
查看次数

使用 Node.js 的类似 PHP 的自动加载器

我正在慢慢地从 PHP 过渡到 Node.js,并试图找到类似于composer dumpautoload. 多亏了PSR-4,当use在每个文件的开头使用带有简单语句的命令时,可以很容易地访问 PHP 中任何文件中的任何类。

npm似乎在管理包和依赖项方面做得很好,但是在您自己的项目中具有相同的灵活性将避免创建require在文件更改路径时很容易中断的语句。

我要查找的示例 - 同一文件夹中的 2 个文件:

一些 testClass.js(类文件)

var testClass = {
    sayHello: function () {
        console.log('this is a test');
    }
};

module.exports = testClass ;
Run Code Online (Sandbox Code Playgroud)

通常这是您将放在另一个文件 index.js 文件中的内容:

var testClass = require('./testClass');

testClass.sayHello();
Run Code Online (Sandbox Code Playgroud)

但是想象一下,您可以使用一些应用程序或命令(例如 PHPcomposer dumpautoload并简单地运行以下命令)为所有类预先编制索引:

var testClass = require('testClass');

testClass.sayHello();
Run Code Online (Sandbox Code Playgroud)

我找不到任何似乎可以实现这一目标的解决方案。

我错过了什么?

php dependency-management autoloader node.js npm

9
推荐指数
1
解决办法
3585
查看次数

什么时候自动加载器被调用?

我有一个使用spl_autoload_register()以下注册的自动加载器:

class MyAutoLoader{
   public function __construct(){
       spl_autoload_register(array($this, 'loader'));
   }

   public function loader($className){
       var_dump($className);
   }
}

$al = new MyAutoLoader(); //Register the autoloader
Run Code Online (Sandbox Code Playgroud)

var_dump(),自动加载器似乎被调用很多东西,数据要插入到数据库中,参数化的SQL查询以及不是:

string 'name' (length=4)

string 'a:2:{s:5:"label";s:4:"Name";s:8:"required";b:1;}' (length=48)

string 'en_US' (length=5)

string 'object' (length=6)

string 'name = ?' (length=8)
Run Code Online (Sandbox Code Playgroud)

这些东西永远不会是类,所以永远不应该使用newclass_exists()等等.

在什么情况下/函数调用是自动加载器调用?我想停止自动加载不是被调用类的"classNames",因为每个$className都被使用检查file_exist(),并且检查这些数据字符串是非常低效的.


问题解决了.我首先按照Brad的建议进行了回溯,并将跟踪转储到文件中(只需添加一个打开文件并附加到其上的小片段).

显然,痕迹非常大,但我选择了我能找到的最简单的一条.顺便说一下,这个跟踪碰巧是一个调用我编写的数据库(ORM)包装器来包装真棒RedBean ORM库的.我转储的结果$className也验证了,因为这些字符串是数据进出数据库.

话虽如此,我有一个__call()拦截我的数据库包装器的方法,做一些处理,将它传递给RedBean,处理结果,然后将其发送回调用者.

问题:在处理过程中,我正在调用is_subclass_of()instanceof,这显然会要求自动加载器尝试加载类(因为我们没有任何名为name =?loaded的类,也不存在).

解决方案是实际确保我们有一个object之前的呼叫is_subclass_of()instanceof: …

php autoloader

8
推荐指数
1
解决办法
2200
查看次数

包括使用Composer的PHP Defines()

我正在使用Composer进行模块依赖管理(喜欢使用autoload.php而不是大量的包含和需要!).

我想在存储凭据的情况下包含一个位于根Composer目录之外的PHP文件(用于安全性)defines().

这不起作用,composer.json:

{
  "autoload": {
    "classmap": ["../credentials.php"]
  }
}
Run Code Online (Sandbox Code Playgroud)

credentials.php:

define('RYAN','BRODIE');
Run Code Online (Sandbox Code Playgroud)

test.php:

require_once __DIR__.'/../vendor/autoload.php';
echo RYAN;
Run Code Online (Sandbox Code Playgroud)

结果Notice: Use of undefined constant RYAN.如果Composer的自动加载器仅用于Class包含,那么我会感激任何黑客(因为它)使这项工作.

php autoloader composer-php

8
推荐指数
1
解决办法
1970
查看次数

PHP Composer Autoloader类未找到异常

标题说明了自己.所以这是我的项目结构:

|src
    |Database
        |Core
            |MySQL.php
        |Support
    start.php
|vendor
composer.json
index.php
Run Code Online (Sandbox Code Playgroud)

MySQL.php文件:

<?php
namespace Database\Core;
//Some methods here
Run Code Online (Sandbox Code Playgroud)

index.php和start.php文件:

//start.php file
<?php
require __DIR__ . '/../vendor/autoload.php';
?>

//index.php file
<?php
use Database\Core;
require __DIR__ . '/src/start.php';

$mysql = new MySQL(); // Gets exception Class 'MySQL' cannot found etc.
?>
Run Code Online (Sandbox Code Playgroud)

最后我的composer.json自动加载部分:

"autoload": {
    "psr-4": "Database\\": "src/" // Also tried "src/Database" too
}
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?我真的厌倦了试图应对这种情况.请帮帮我们!谢谢.

php autoloader composer-php

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

基于目录结构的自动加载名称空间

根据PHP页面上的最高评论spl_autoload_register( ):

对于具有命名空间类的PHP 5.3用户来说是个好消息:

当您创建与包含类的名称空间匹配的子文件夹结构时,您甚至不必定义自动加载器.

<?php
    spl_autoload_extensions(".php"); // comma-separated list
    spl_autoload_register();
?>
Run Code Online (Sandbox Code Playgroud)

但是,当我有以下结构时:

* classes/someclass.php

* index.php

其中someclass.php包含以下内容:

<?php
    class someclass {
        function __construct( ) {
            echo 'It works!';
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

index.php包含:

<?php
    spl_autoload_extensions(".php");
    spl_autoload_register();

    new classes\someclass;
?>
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

致命错误:spl_autoload():无法加载类classes\someclass

我弄错了吗?我怎样才能做到这一点?

从评论

这对于班级不起作用:

<?php
    namespace classes;
    class someclass {
        function __construct( ) {
            echo 'It works!';
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

php autoload autoloader spl-autoload-register

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

PHP spl_autoload_register()找不到函数

这段代码:

<?php
namespace designblob;

function autoloader($class){
        include "wrappers/databaseWrapper.php";
}

spl_autoload_register('autoloader');    
?>
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

致命错误:在/var/www/xxx/library/autoloader.php:8中找不到未找到错误'LogicException'且找不到消息'Function'autooloader'(找不到函数'autoloader'或函数名称无效)'堆栈跟踪:#0 /var/www/xxx/library/autoloader.php(8):spl_autoload_register('autoloader')#1 /var/www/xxx/library/debug.php(19):require_once('/ var/www/xxx. ..')#8 {main}在第8行的/var/www/xxxm/library/autoloader.php中引发

为什么不起作用?

php autoloader

7
推荐指数
1
解决办法
5505
查看次数

Autoloader预期类Symfony2

我正在使用symfony 2.3框架,自动加载器声称已找到该文件,但没有类:

RuntimeException: The autoloader expected class "Sensio\Bundle\
FrameworkExtraBundle\Request\ParamConverter\DateTimeParamConverter" 
to be defined in file "/home/na/auth/vendor/sensio/framework-extra-bundle/
Sensio/Bundle/FrameworkExtraBundle/Request/ParamConverter/
DateTimeParamConverter.php". The file was found but the class was not in it, 
the class name or namespace probably has a typo.
Run Code Online (Sandbox Code Playgroud)

这个引用的文件如下所示:

<?php

/*
 * This file is part of the Symfony framework.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * This source file is subject to the MIT license that is bundled
 * with this source code in the file LICENSE.
 */

namespace …
Run Code Online (Sandbox Code Playgroud)

php autoloader symfony doctrine-orm

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

模块自动加载是否可靠?

环境

我有以下文件夹结构,我保留PowerShell模块:

C:
  PsModules
     ...
     util
        util.psm1 (this contains implementation of 'Test-Function')
        util.test.ps1
     ftp
        ftp.psm1
        http.test.ps1
     ... 
Run Code Online (Sandbox Code Playgroud)

大约有50个文件夹和模块c:\PsModules.

我已将环境变量设置PSModulePath为包含c:\PsModules.这似乎符合Microsoft文档此答案中描述的 "格式良好的模块"的条件.

症状

Test-Function从ISE调用时有时无法自动找到.实际上,在任何新发布的ISE上,总会有一些(似乎不可预测的)模块无法自动找到.Test-Function例如,无法自动查找,如下所示:

PS C:\> Test-Function
Test-Function : The term 'Test-Function' is not recognized as the name 
of a cmdlet, function, script file, or operable program. Check the 
spelling of the name, or if a path was included, verify that the path is 
correct and try …
Run Code Online (Sandbox Code Playgroud)

powershell module autoloader

7
推荐指数
1
解决办法
631
查看次数