【发布时间】:2015-05-04 09:12:16
【问题描述】:
我的 laravel-4 应用程序中有以下目录:
应用程序/Latheesan
这已添加到我的composer.json,如下所示:
"autoload": {
...
"psr-0": {
"Latheesan": "app/"
}
...
},
鉴于该设置,我想创建一个名为 Helpers 的自定义外观类,以便我可以将它用于我的应用程序中的各种操作,例如Helpers::getFreeStock();
为此,我创建了以下文件夹和文件:
在相应的文件中使用以下代码:
app/Latheesan/System/Helpers/Facades/Helpers.php
<?php namespace Latheesan\System\Helpers;
use Illuminate\Support\Facades\Facade;
class Helpers extends Facade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'helpers'; }
}
app/Latheesan/System/Helpers/Helpers.php
<?php namespace Latheesan\System\Helpers;
class Helpers {
/**
* Get free stock levels by organisation id.
* If param $skus is empty, free stock will be calculated for every inventory organisation owns.
*
* @param $organisation_id
* @param array $skus
* @return array
*/
public function getFreeStock($organisation_id, $skus = [])
{
return 'hello world - todo actual implementation';
}
}
app/Latheesan/System/Helpers/HelpersServiceProvider.php
<?php namespace Latheesan\System\Helpers;
use Illuminate\Support\ServiceProvider;
class HelpersServiceProvider extends ServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app['helpers'] = $this->app->share(function($app)
{
return new Helpers;
});
}
}
现在我已经像这样更新了 app/config/app.php:
// Add service provider
'Latheesan\System\Helpers\HelpersServiceProvider'
...
// Create alias
'Helpers' => 'Latheesan\System\Helpers\Facades\Helpers'
最后,为了测试这一点,我创建了以下路线:
Route::get('/test', function() {
dd(Helpers::getFreeStock(1, ['vcf001']));
});
当我访问这个/test 来测试帮助器 Facade 类时,我收到以下错误:
找不到类“Latheesan\System\Helpers\Facades\Helpers”
我在这里做错了什么?知道为什么这不起作用吗?
【问题讨论】:
-
你的外观文件有命名空间
Latheesan\System\Helpers,但缺少Facades -
谢谢,现在我得到一个不同的错误:
Cannot redeclare class Latheesan\System\Helpers\Facades\Helpers -
忽略我之前的评论。进行更改后,我必须运行
composer dump-auto并解决了问题。一切都很好。感谢您的帮助。 -
请回答您的问题,也许其他用户会得到帮助。
-
@Luceos 好的,我现在已经发布了答案。