我想用Laravel编写自己的类,以便在控制器中使用。我试着用门面做这个。
这是我的文件夹结构:
app
classes
facades
serviceproviders
我在composer.json 中自动加载了它们
"app/facades",
"app/classes",
"app/serviceproviders"
我的类(app/classes/DateRange.php)
<?php namespace myMethods;
class DateRange {
public function doSomething()
{
echo 'Doing something!';
}
}
我的facade(app/facements/DateRangeFacade.php)
<?php namespace myMethodsFacades;
use IlluminateSupportFacadesFacade;
class DateRangeFacade extends Facade {
protected static function getFacadeAccessor() { return 'DateRange'; }
}
我的服务提供商(app/serviceproviders/DateRangeServiceProvider.php)
<?php namespace myMethods;
use IlluminateSupportServiceProvider;
class DateRangeServiceProvider extends ServiceProvider {
public function register()
{
$this->app['DateRange'] = $this->app->share(function($app)
{
return new DateRange;
});
$this->app->booting(function()
{
$loader = AliasLoader::getInstance();
$loader->alias('DateRange', 'myMethodsFacadesDateRangeFacade');
});
}
}
还将"myMethods\DateRangeServiceProvider"添加到app.php 中的提供程序数组中
打开网站时,会显示"Class"myMethods\AliasLoader"not found"。在stackoverflow上找到了一个解决方案,将"\"放在AliasLoader::之前,但这没有帮助。
我做错了什么?提前谢谢。
您必须使用或命名所有内容:
<?php namespace myMethods;
use IlluminateSupportServiceProvider;
use IlluminateFoundationAliasLoader;
class DateRangeServiceProvider extends ServiceProvider {
public function register()
{
$this->app['DateRange'] = $this->app->share(function($app)
{
return new DateRange;
});
$this->app->booting(function()
{
$loader = AliasLoader::getInstance();
$loader->alias('DateRange', 'myMethodsFacadesDateRangeFacade');
});
}
}
这是必需的(您不能简单地使用\AliasLoader),因为AliasLoader不是Laravel中的Alias,它是一个类,所以您需要告诉PHP它的确切位置。