您可以從Laravel framework itself激勵自己。
我將以您的格式化程序爲例,並參考Laravel Framework中的url
幫助程序。
開始創建自己的helpers.php
文件:
<?php
if (! function_exists('format_that')) {
/**
* Generate something
*
* @param string $text
* @return string
*/
function format_that($text)
{
return app('formatter')->format_that($text);
}
}
而且add it您composer.json
文件:
"autoload": {
"files": [
"app/helpers/helpers.php"
]
}
運行此命令重新自動加載php文件:
$ composer dumpautoload
創建您的service providerapp/Providers/FormatterServiceProvider.php
:
<?php
namespace Illuminate\Routing;
use Illuminate\Support\ServiceProvider;
use App\Helpers\FormatGenerator;
class FormatterServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app['formatter'] = $this->app->share(function ($app) {
return new FormatGenerator($app['request']);
});
}
}
Register您的服務提供商。 Laravel框架調用register
方法,但你只需要將其添加到您的應用程序配置文件config/app.php
:
'providers' => [
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
// other providers...
App\Providers\FormatterServiceProvider::class,
]
最後,創建您的actual generator classapp/Helpers/FormatGenerator.php
<?php
namespace App\Helpers;
use Illuminate\Http\Request;
class FormatGenerator
{
protected $request;
/**
* Create a new URL Generator instance.
*
* @param \Illuminate\Routing\RouteCollection $routes
* @param \Illuminate\Http\Request $request
* @return void
*/
public function __construct(Request $request)
{
$this->request = $request;
}
public function format_that($text){
if ($request->path() == "home"){
return mb_strtoupper($text);
}
else{
return $text;
}
}
}
您可以選擇創建a Facadeapp/Facade/Formatter.php
,要能做Formatter::format_that($text)
:
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
/**
* @see \App\Helpers\FormatGenerator
*/
class Formatter extends Facade
{
protected static function getFacadeAccessor() { return 'formatter'; }
}
你庫侖d問自己:
- 爲什麼立面?只需撥打
Formatter::format_that($text)
而不是app('formatter')->format_that($text)
即可在其他位置重新使用組件。糖的語法真的。
- 爲什麼服務提供商?依賴注射。如果您需要使用
Request
或想要構建複雜的對象,服務提供商將爲您處理此問題並使其在$app
對象中可用。
所以我做了所謂的App_Helpers.php帶班App_Helpers,從我可以告訴我的start.php自動加載機加載默認庫文件夾庫文件,是我的應用程序似乎仍不知道App_Helpers :: format_something()是? – Jim
@Jim - 我想答案在這裏:http://forums.laravel.com/viewtopic.php?pid=18328#p18328 - 在庫類名稱中沒有下劃線 –
啊是的!謝謝你很好找! – Jim