我已经创建了提供程序类并将其放入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
目录中的facade类:
<?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
结尾处它没有问题。
问题:
model
目录中的单独文件夹中。答案 0 :(得分:0)
解决方案很简单,但根本不明显。添加提供商后,您需要运行:
composer dump-autoload
在主项目目录中。它将生成包含您的服务提供商的新autoload_classmap.php
文件。在这种情况下,composer-update
也可以工作,但这不是必要的,而且需要更多的时间。很奇怪,当你将提供者放入app/config/app.php
时这是必要的,而当你手动注册提供者时则没有必要,但这就是它的工作原理。
答案 1 :(得分:0)
解决方案很简单,但根本不明显。添加提供商后,您需要运行:
composer dump-autoload
当你添加一些不在你的composer.json自动加载中的文件夹或其他类时,你会添加它然后运行上面的命令。