
Kalebe Oliveira
Ich möchte Hilfsfunktionen erstellen, um zu vermeiden, dass Code zwischen Ansichten in Laravel wiederholt wird. Zum Beispiel:
view.blade.php
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
Sie sind im Grunde Funktionen zur Textformatierung. Wie soll ich global verfügbare Hilfsfunktionen wie definieren fooFormatText()
?

Josef Silber
Ein … kreieren helpers.php
Datei in Ihrem App-Ordner und laden Sie sie mit Composer hoch:
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helpers.php" // <---- ADD THIS
]
},
Nachdem Sie das zu Ihrer hinzugefügt haben composer.json
Datei, führen Sie den folgenden Befehl aus:
composer dump-autoload
Wenn Sie Ihre nicht behalten möchten helpers.php
Datei in Ihrer app
Verzeichnis (da es sich nicht um eine PSR-4-Namespace-Klassendatei handelt), können Sie Folgendes tun laravel.com
Website tut: speichert die helpers.php
im Bootstrap-Verzeichnis. Denken Sie daran, es in Ihrem einzustellen composer.json
Datei:
"files": [
"bootstrap/helpers.php"
]

heisisch
Benutzerdefinierte Klassen in Laravel 5, der einfache Weg
Diese Antwort gilt für Allgemeines benutzerdefinierte Klassen in Laravel. Eine Blade-spezifischere Antwort finden Sie unter Benutzerdefinierte Blade-Direktiven in Laravel 5.
Schritt 1: Erstellen Sie Ihre Helpers-Datei (oder eine andere benutzerdefinierte Klassendatei) und geben Sie ihr einen passenden Namespace. Schreiben Sie Ihre Klasse und Methode:
<?php // Code within app\Helpers\Helper.php
namespace App\Helpers;
class Helper
{
public static function shout(string $string)
{
return strtoupper($string);
}
}
Schritt 2: Erstellen Sie einen Alias:
[
...
'Helper' => App\Helpers\Helper::class,
...
Step 3: Run composer dump-autoload
in the project root
Step 4: Use it in your Blade template:
<!-- Code within resources/views/template.blade.php -->
{!! Helper::shout('this is how to use autoloading correctly!!') !!}
Extra Credit: Use this class anywhere in your Laravel app:
<?php // Code within app/Http/Controllers/SomeController.php
namespace App\Http\Controllers;
use Helper;
class SomeController extends Controller
{
public function __construct()
{
Helper::shout('now i\'m using my helper class in a controller!!');
}
...
Source: http://www.php-fig.org/psr/psr-4/
Why it works: https://github.com/laravel/framework/blob/master/src/Illuminate/Support/ClassLoader.php
Where autoloading originates from:
http://php.net/manual/en/language.oop5.autoload.php

Andrew Brown
my initial thought was the composer autoload as well, but it didn’t feel very Laravel 5ish to me. L5 makes heavy use of Service Providers, they are what bootstraps your application.
To start off I created a folder in my app
directory called Helpers
. Then within the Helpers
folder I added files for functions I wanted to add. Having a folder with multiple files allows us to avoid one big file that gets too long and unmanageable.
Next I created a HelperServiceProvider.php
by running the artisan command:
artisan make:provider HelperServiceProvider
Within the register
method I added this snippet
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
require_once($filename);
}
}
lastly register the service provider in your config/app.php
in the providers array
'providers' => [
'App\Providers\HelperServiceProvider',
]
jetzt jede Datei in Ihrer Helpers
Verzeichnis geladen und einsatzbereit.
UPDATE 2016-02-22
Hier gibt es viele gute Optionen, aber wenn meine Antwort für Sie funktioniert, habe ich ein Paket für die Einbeziehung von Helfern auf diese Weise erstellt. Sie können das Paket entweder als Inspiration verwenden oder es auch mit Composer herunterladen. Es hat einige eingebaute Helfer, die ich oft verwende (aber die standardmäßig alle inaktiv sind) und ermöglicht es Ihnen, Ihre eigenen benutzerdefinierten Helfer mit einem einfachen Artisan-Generator zu erstellen. Es geht auch auf den Vorschlag eines Antwortenden ein, einen Mapper zu verwenden, und ermöglicht es Ihnen, die zu ladenden benutzerdefinierten Helfer explizit zu definieren oder standardmäßig alle PHP-Dateien in Ihrem Helferverzeichnis automatisch zu laden. Feedback und PRs sind sehr willkommen!
composer require browner12/helpers
Github: browner12/helfer

esazzad
Dies wird vorgeschlagen von JeffreyWay
in diesem Laracasts-Diskussion.
- In deinem
app/Http
Verzeichnis, erstellen Sie eine helpers.php
Datei und fügen Sie Ihre Funktionen hinzu.
- Innerhalb
composer.json
in dem autoload
blockieren, hinzufügen "files": ["app/Http/helpers.php"]
.
- Laufen
composer dump-autoload
.

dKen
Nachdem ich eine Vielzahl von Antworten auf SO und Google durchgesehen hatte, konnte ich immer noch keinen optimalen Ansatz finden. Die meisten Antworten deuten darauf hin, dass wir die Anwendung verlassen und uns auf das Drittanbieter-Tool Composer verlassen, um die Arbeit zu erledigen, aber ich bin nicht davon überzeugt, dass die Kopplung mit einem Tool nur zum Einfügen einer Datei sinnvoll ist.
Die Antwort von Andrew Brown kam meiner Meinung nach am nächsten, aber (zumindest in 5.1) ist der Schritt des Dienstanbieters unnötig. Heisians Antwort hebt die Verwendung von hervor PSR-4
was uns einen Schritt näher bringt. Hier ist meine endgültige Implementierung für Helfer in Ansichten:
Erstellen Sie zunächst irgendwo in Ihrem Apps-Verzeichnis eine Hilfsdatei mit einem Namespace:
namespace App\Helpers;
class BobFinder
{
static function bob()
{
return '<strong>Bob?! Is that you?!</strong>';
}
}
Geben Sie als Nächstes einen Alias für Ihre Klasse ein config\app.php
in dem aliases
Array:
'aliases' => [
// Other aliases
'BobFinder' => App\Helpers\BobFinder::class
]
Und das sollte alles sein, was Sie tun müssen. PSR-4
und der Alias sollte den Helfer Ihren Ansichten aussetzen, also in Ihrer Ansicht, wenn Sie Folgendes eingeben:
{!! BobFinder::bob() !!}
Es sollte ausgeben:
<strong>Bob?! Is that you?!</strong>

Gemeinschaft
Benutzerdefinierte Blade-Direktiven in Laravel 5
Ja da ist Ein weiterer Weg, dies zu tun!
Schritt 1: Registrieren Sie eine benutzerdefinierte Blade-Direktive:
<?php // code in app/Providers/AppServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Blade; // <-- This is important! Without it you'll get an exception.
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// Make a custom blade directive:
Blade::directive('shout', function ($string) {
return trim(strtoupper($string), '(\'\')');
});
// And another one for good measure:
Blade::directive('customLink', function () {
return '<a href="#">Custom Link</a>';
});
}
...
Schritt 2: Verwenden Sie Ihre benutzerdefinierte Blade-Anweisung:
<!-- // code in resources/views/view.blade.php -->
@shout('this is my custom blade directive!!')
<br />
@customLink
Ausgänge:
DAS IST MEINE CUSTOM-BLADE-RICHTLINIE!!
Benutzerdefinierten Link
Quelle: https://laravel.com/docs/5.1/blade#extending-blade
Zusätzliche Lektüre: https://mattstauffer.co/blog/custom-conditionals-with-laravels-blade-directives
Wenn Sie lernen möchten, wie Sie am besten benutzerdefinierte Klassen erstellen, die Sie verwenden können irgendwosiehe Benutzerdefinierte Klassen in Laravel 5, der einfache Weg
Dies ist meine HelpersProvider.php-Datei:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider
{
protected $helpers = [
// Add your helpers in here
];
/**
* Bootstrap the application services.
*/
public function boot()
{
//
}
/**
* Register the application services.
*/
public function register()
{
foreach ($this->helpers as $helper) {
$helper_path = app_path().'/Helpers/'.$helper.'.php';
if (\File::isFile($helper_path)) {
require_once $helper_path;
}
}
}
}
Sie sollten einen Ordner namens erstellen Helpers
unter dem app
Ordner, erstellen Sie dann eine Datei mit dem Namen whatever.php
innen und fügen Sie die Zeichenfolge hinzu whatever
innerhalb des $helpers-Arrays.
Getan!
Bearbeiten
Ich verwende diese Option nicht mehr, ich verwende derzeit Composer, um statische Dateien wie Helfer zu laden.
Sie können die Helfer direkt hinzufügen unter:
...
"autoload": {
"files": [
"app/helpers/my_helper.php",
...
]
},
...
9873500cookie-checkSo erstellen Sie benutzerdefinierte Hilfsfunktionen in Laravelyes