2014-10-10 26 views
1

我正在从Codeigniter切换到Laravel。在CI其便于使用者操作的外部库或类,只是把它放在application/libraries文件夹,然后通过从控制器加载:如何在laravel框架中使用外部php类?

$this->load->library('libraryName') 

现在,我想要做同样的事情在Laravel。我用这样的场景:

  1. 我叫librariesapp文件夹内创建一个文件夹。
  2. 更改composer.json(其位于根)如下所示:

    "autoload": { 
        "classmap": [ 
        "app/commands", 
        "app/controllers", 
        "app/models", 
        "app/database/migrations", 
        "app/database/seeds", 
        "app/tests/TestCase.php", 
        "app/libraries" // this was added 
        ] 
    }, 
    
  3. 而且从CMD运行命令composer dump-autoload

我的班级是这样的:存储在文件

class Messages{ 
    function errorMessage(){//....} 
    function successMessage(){//....} 
} 

类称为Messages.php其位于app\libraries文件夹中。

我仍然有同样的错误:

Class 'Messages' not found

什么问题,该如何解决?

+0

你在哪里创建消息类?它的名字是什么,它的文件是什么?另外,你从何处/何时实例化它? – 2014-10-10 23:46:11

+0

正如我在问题中所说的,名为'messages'的类存储在名为'messages.php'的文件中,并位于'app \ libraries'中。我需要从contoller或rout.php文件实例化它。 – 2014-10-11 03:02:56

+0

是应用程序/库/消息还是应用程序/库/ Messages.php? – 2014-10-11 03:12:48

回答

3
  1. 创建一个新的文件夹:应用程序/您的文件夹名称,并把你的类文件夹
  2. 在应用中打开该globals.php文件/启动
  3. 你应该看到这一点:

    ClassLoader::addDirectories(array(
    
        app_path().'/commands', 
        app_path().'/controllers', 
        app_path().'/models', 
        app_path().'/database/seeds', 
    
    )); 
    
  4. 与你的类添加您的文件夹,这个数组

    app_path().'/your-folder-name' 
    

更多信息可以在这里找到:Where do I put Laravel 4 helper functions that can display flash messages?

+2

您可以避免编辑globals.php中的'ClassLoader',只需在'app中创建Messages.php文件后运行'composer dump-autoload' */libraries'。如果你添加一个新的类到文件夹中,或者如果你重命名一个类,那么之后运行'composer dump-autoload'来获取这个改变。或者,对于奖励积分,您可以使用PSR-4自动加载和命名空间,这更符合Laravel 5中的处理方式;一个很好的教程是[这里](https:// laracasts。COM /经验/ PSR-4自动加载)。 – damiani 2014-10-11 04:47:32

0

检查您的文件,自动加载类/vendor/composer/autoload_classmap.php 类应该在那里。 如果是 - 检查你是否真的在你的请求中使用作曲家自动加载?