您可以通过Laravel framework itself 激励自己。
我将以你的格式化程序为例,并参考 Laravel 框架中的 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 provider app/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 class app/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'; }
}
你可以问自己:
-
为什么要使用外观?您可以通过简单地调用
Formatter::format_that($text) 而不是app('formatter')->format_that($text) 来在其他地方重用该组件。真的是糖语法。
-
为什么是服务提供者? 依赖注入。如果您需要使用
Request 或想要构建一个复杂的对象,服务提供者会为您处理好,并在您的$app 对象中提供它。