Jakie są najlepsze praktyki i najlepsze miejsca dla pomocników Laravel 4 lub podstawowych funkcji?

Więc staram się zrozumieć najlepsze miejsce, aby umieścić funkcję globalną w laravel 4. Na przykład: formatowanie daty. Myślę, że nie warto robić elewacji, fasady są zbyt modułowe. Czytałem artykuły o tworzeniu folderu biblioteki i przechowywaniu tam klas, ale to również wydaje się dużo dla prostej funkcji. Czy takie "narzędzie" nie powinno być dostępne w szablonach blade?

Jakie są najlepsze praktyki dla czegoś takiego? I jak udostępnić ostrze szablony?

Author: Antonio Carlos Ribeiro, 2013-06-13

4 answers

Brzydki, leniwy i okropny sposób: na końcu bootstrap/start.php dodaj include('tools.php') i umieść swoją funkcję w Nowym pliku.

Czysty sposób: tworzenie biblioteki. W ten sposób będzie automatycznie ładowany tylko wtedy, gdy faktycznie go użyjesz.

  • Utwórz libraries folder w swoim app folderze
  • Utwórz plik biblioteki, Utwórz w nim klasę i dodaj do niego funkcje statyczne
  • Opcja 1 : Edytuj start/global.php Aby dodać app_path().'/libraries' do tablicy ClassLoader::addDirectories(.
  • Opcja 2 : Edycja composer.json aby dodać "app/libraries" do tablicy autoload. Run composer dump-autoload
  • wywołaj swoją klasę i funkcje statyczne z twoich poglądów.

O opcjach, cytowany z pliku global.php

Oprócz użycia Composera, możesz użyć loadera klasy Laravel do załaduj swoje kontrolery i modele. Jest to przydatne do przechowywania wszystkich Twoje klasy w "globalnej" przestrzeni nazw bez aktualizacji kompozytora.

Można połączyć obie opcje, gdzie Loader klasy Laravel automatycznie wyszukuje klasy w zarejestrowanych katalogach (Opcja 1, łatwiej), a Composer zachowa zapis wszystkich klas, ale dopiero po zaktualizowaniu (Opcja 2, może poprawić wydajność).

 229
Author: Alexandre Danault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 12:14:30

Moim sposobem na to jest utworzenie nowego folderu w katalogu /app w katalogu głównym Twojego projektu Laravel 4. Następnie dodaj ten folder do pierwszej tablicy pliku /app/start/global.php w następujący sposób:

<?php

ClassLoader::addDirectories(array(

app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/classes', // This line is the one I've added.

));

Tak długo, jak struktura folderów w nowym folderze /app/classes jest zgodna z konwencją przestrzeni nazw. Laravel 4 automatycznie załaduje wszystkie klasy / pliki w tym folderze. W ten sposób nie trzeba grzebać w plikach composer ani uruchamiać komend composer.

Nie wiem, czy jest to najlepsza praktyka ale to na pewno działa.

Jeśli utworzyłeś prosty plik o nazwie /app/classes/Helpers/Helper.php taki jak ten:

<?php namespace Helpers;

class Helper {

    public static function helloWorld()
    {
        return 'Hello World';
    }
}

Wystarczy zadzwonić Helpers\Helper::helloWorld();

Możesz również nazwać tę klasę pomocniczą w pliku /app/config/app.php. Wystarczy dodać coś takiego na końcu tablicy aliases:

'Helper'          => 'Helpers\Helper'
 80
Author: JasonMortonNZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-13 22:39:23

Pomocnicy Laravela.metoda php polega na dodaniu go do "plików" w programie composer.json (https://github.com/laravel/framework/blob/master/composer.json):

"autoload": {
    "classmap": [
        ...
    ],
    "files": [
        "app/libraries/helpers.php"
    ],
},

To, co robię, to tworzenie małych klas (kilka metod na klasę, jedna linia na metodę, wszystko rozciągnięte od czegoś i suche, to mój cel),

class ExtendedCarbon extends Carbon\Carbon {

    public function formatDDMMAAAA($date)
    {
        /// format and return
    }

}

Zapisz je w aplikacji / bibliotekach i dodaj do programu composer.json:

"autoload": {
    "classmap": [
        ...
        "app/libraries",
        ...
    ],
},

Wykonaj

composer dump

A potem używaj ich gdziekolwiek jesteś need

$formatted = (new ExtendedCarbon)->formatDDMMAAAA($date);

Obejrzyj ten film o refaktoryzacji: http://www.youtube.com/watch?v=DC-pQPq0acs

Przy okazji, jestem pewien, że to był tylko przykład, ale możesz nie potrzebować pomocnika do formatowania dat, ponieważ wszystkie daty w Laravel są instancjami Carbon ( https://github.com/briannesbitt/Carbon ) i ma mnóstwo metod formatowania daty i czasu.

 24
Author: Antonio Carlos Ribeiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-10 17:26:27

Możesz również użyć View::share() razem z zamknięciami, aby to osiągnąć - właśnie o tym pisałem: http://www.develophp.org/2014/07/laravel-4-blade-helper-functions/

Dodatkowa korzyść: nie musisz tworzyć dodatkowej klasy, a także utrzymywać globalnej przestrzeni nazw w czystości.

 6
Author: Franz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 14:38:01