如何将自己的代码加载到Laravel?这些方式之间的差异?

时间:2014-01-12 18:25:29

标签: php laravel laravel-4 composer-php

我对如何将自己的代码(类或常规函数)加载到Laravel应用程序感到困惑。我已经通过几种方式看到了这一点:

  1. 在app目录中创建一个文件夹(例如:app/libs)并将app_path().'/libs'添加到start/global.php
  2. 将其添加到composer.json的{​​{1}}
  3. "require"添加到"psr-0"的{​​{1}}并添加文件
  4. composer.json添加到"autoload"的{​​{1}}和外观的别名
  5. 他们之间有什么区别?为什么以及何时应该使用这些方法?我应该加载一个类,几个.php文件还是只加载文件夹?也许同时引用这3件事情?

    编辑:

    这些是我的猜测:

    • 选项2仅适用于包
    • 选项3如果要在新创建的文件夹中声明的自定义命名空间内加载每个类(不要理解为My\Custom\Service\Provider而不是仅将其添加到app/config/app.php
    • 选项1与选项3相同,仅由Laravel处理,而不是由Composer
    • 处理
    • 你可以引用一个文件夹,它会加载里面找到的每个类,或者你可以引用某个文件,它会加载里面的类

    关于选项4:

    • 如果您想在代码的任何位置使用外观,那么需要将名称空间添加到composer.json中

    编辑2:

    • 如果您将其添加到'providers'

      "psr-0"

      将加载"classmap"文件夹内文件中任何名称空间的每个类

    • 如果您将其添加到"classmap"

      "classmap": [
          "app/libs"
      ]
      

      它会加载app/libs文件夹中"psr-0"名称空间内的每个类

    仍然不确定为何/何时使用服务提供商和别名。

    编辑3:

    "psr-0": { "Libs": "app/" } 如果我想加载一个跟在文件夹结构中的命名空间(如果它与子文件夹结构不匹配,它将不会在子名称空间中加载一个类)

    Libs用于“随机”类,函数......排序“其余”

2 个答案:

答案 0 :(得分:0)

您可以在laravel中加载自己的代码2(可能是3种)。

  1. 使用composer
  2. 使用ClassLoader
  3. 手动包含或要求任何地方
  4.   

    选项2仅适用于包

    是的,你是对的。

      

    选项1与选项3相同,仅由Laravel处理而不是   作曲家

    是的,你是对的。

      

    选项3如果要加载自定义命名空间中的每个类   在新创建的文件夹中声明(不要理解为什么“psr-0”   而不是仅将其添加到“classmap”)

    某些包或类符合psr-0标准,其余不是。 psr-0选项是将命名空间映射到目录。 classmap是映射 命名空间到某个目录或文件,并用于不符合psr-0标准的类。

    You can use the classmap generation support to define autoloading for all libraries that do not follow PSR-0/4.

      

    如果您想在代码的任何位置使用外观,那就可以了   需要将名称空间添加到composer.json

    nope,您必须在app/config/app.php

    中为外观添加类别名
    1. 如果您的代码只是文件,而不是类,那么请使用composer autoload files
    2. 如果您的代码是类但不遵守psr-0/4标准,请使用composer autoload classmap或只将包含目录添加到app/start/global.php
    3. 否则,请使用composer autoload psr-0psr-4

答案 1 :(得分:0)

在Laravel 4中,我将所有课程添加到" mylibrary"文件夹中。

然后在 app / start / global.php ,我添加 app_path()。' / mylibrary',

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
    app_path().'/mylibrary',
));

在mylibrary中有MyClass.php,在MyClass.php中有test_myfunction()

并在app / view / home.blade.php我添加以下代码:

<?php
  $FMyClass11 = new MyClass;
  $just_test=($FMyClass1->test_myfunction());
?>

希望它适合你。 :)