Możesz inspirować się od Laravel framework itself.
Podam twój przykład formatyzatora i zajrzyj do pomocnika url
w Laravel Framework.
zacząć od stworzenia własnego helpers.php
plik:
<?php
if (! function_exists('format_that')) {
/**
* Generate something
*
* @param string $text
* @return string
*/
function format_that($text)
{
return app('formatter')->format_that($text);
}
}
And add it do pliku composer.json
:
"autoload": {
"files": [
"app/helpers/helpers.php"
]
}
wykonaniu tego polecenia, aby odtworzyć plik autoload PHP:
$ composer dumpautoload
Stwórz swoją 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 usługodawca. Laravel ramy wywołuje register
metody, ale wystarczy dodać go do swojej aplikacji pliku konfiguracyjnym config/app.php
:
'providers' => [
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
// other providers...
App\Providers\FormatterServiceProvider::class,
]
Wreszcie, stwórz 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;
}
}
}
Opcjonalnie można utworzyć a Facadeapp/Facade/Formatter.php
, aby móc do 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'; }
}
You coul d zadaj sobie pytanie:
- Dlaczego fasada? Możesz ponownie użyć komponentu w innym miejscu, dzwoniąc pod numer
Formatter::format_that($text)
zamiast app('formatter')->format_that($text)
. Składnia cukru naprawdę.
- Dlaczego dostawca usługi? Wstrzyknięcia zależności. Jeśli chcesz użyć obiektu
Request
lub chcesz zbudować złożony obiekt, dostawca usług zaopiekuje się nim i udostępni go w obiekcie $app
.
Więc zrobiłem plik biblioteki o nazwie App_Helpers.php z App_Helpers klasy iz tego co mogę powiedzieć mój autoloadera w start.php jest ładowanie folder bibliotek domyślnie, tak moja aplikacja nadal nie wydaje się wiedzieć, jakie App_Helpers :: format_something() to? – Jim
@Jim - Myślę, że odpowiedź jest tutaj: http://forums.laravel.com/viewtopic.php?pid=18328#p18328 - brak podkreśleń w nazwach klas biblioteki –
Ach tak! Dziękuję bardzo dobrze znaleźć! – Jim