【发布时间】: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 的末尾,它可以正常工作。
问题:
- 如何让它发挥作用?
- 我应该在哪里保存提供程序/外观文件?这里我把它们放到
model目录下放到不同的文件夹中。
【问题讨论】:
-
你把
Nice URL叫做URL slug,所以你最好保留这个术语 -
您还将服务命名空间放在模型目录中。你可以这样做,但感觉很不对。