【问题标题】:Provider class not found未找到提供程序类
【发布时间】:2014-10-14 18:48:58
【问题描述】:

我已经创建了提供者类并将其放入app/models/Providers 目录:

<?php

//app/models/Providers/NiceUrlServiceProvider.php

namespace Providers;

use Illuminate\Support\ServiceProvider;

class NiceUrlServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('niceurl', function()
            {
                return new \Utils\NiceUrl();
            });
    }    
}

app/models/Facades 目录中的外观类:

<?php

// app/models/Facades/NiceUrl.php
namespace Facades;

use Illuminate\Support\Facades\Facade;

class NiceUrl extends Facade {

    protected static function getFacadeAccessor() { return 'niceurl'; }

}

我还编辑了 app/config/app.php 并将其添加为提供程序:

'providers' => array(

    // default ones  
    'Providers\NiceUrlServiceProvider',    
),

并为 Facade 添加别名:

'aliases' => array(

     // default ones
    'NiceUrl'         => 'Facades\NiceUrl',

),

当我尝试运行我的应用时,我得到:

找不到类“Providers\NiceUrlServiceProvider”

    *
* @param \Illuminate\Foundation\Application $app
* @param string $provider
* @return \Illuminate\Support\ServiceProvider
*/
public function createProvider(Application $app, $provider)
{
return new $provider($app); // this line marked as causing problem
}

但是,如果我在添加提供程序的行中添加注释并在 public/index.php 中将此代码放在文件末尾:

$x = new \Providers\NiceUrlServiceProvider($app);
$x->register();
echo NiceUrl::create('some thing');

它可以正常工作,因此自动加载似乎没有问题。

另外,如果我使用以下方法手动注册提供者:

$app->register('Providers\NiceUrlServiceProvider');

echo NiceUrl::create('some thing');

public/index.php 的末尾,它可以正常工作。

问题:

  1. 如何让它发挥作用?
  2. 我应该在哪里保存提供程序/外观文件?这里我把它们放到model目录下放到不同的文件夹中。

【问题讨论】:

  • 你把Nice URL叫做URL slug,所以你最好保留这个术语
  • 您还将服务命名空间放在模型目录中。你可以这样做,但感觉很不对。

标签: php laravel laravel-4


【解决方案1】:

解决方案很简单,但一点也不明显。添加您的提供程序后,您需要运行:

作曲家转储自动加载

当您添加一些不在您的 composer.json 自动加载中的文件夹或其他类时,您将添加它然后运行上述命令。

【讨论】:

    【解决方案2】:

    解决方案很简单,但一点也不明显。添加您的提供程序后,您需要运行:

    composer dump-autoload
    

    在您的主项目目录中。它将生成新的autoload_classmap.php 文件,其中包含您的服务提供商。 composer-update 在这种情况下也可以工作,但这不是必需的,而且需要更多时间。很奇怪,当您将提供程序放入 app/config/app.php 时是必要的,而当您手动注册提供程序时则没有必要,但这就是它的工作原理。

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2021-02-03
      • 1970-01-01
      • 2016-08-14
      • 2017-11-30
      相关资源
      最近更新 更多