Где разместить HTML-макросы в laravel 5?

В laravel 4 у меня были макросы HTML, которые использовались в нескольких представлениях, например:

HTML::macro('minipics', function($pic)
{
    //
}

Для этого у меня был файл macros.php в папке /app. Я не мог узнать, куда поместить макросы в laravel 5. Должен ли я использовать для этого функцию «macroable»?

редактировать:

В итоге я использовал @include(), придав ему необходимые значения.

@include('shared.minipics', $mpics = $ppics)
@include('shared.minipics', $mpics = $randpics)

person haheute    schedule 05.02.2015    source источник


Ответы (2)


Я переместил свои макросы в каталог "resources/macros/...", потому что я думаю, что они принадлежат ко всему другому коду, связанному с представлением. Чтобы загрузить их, я использую поставщика услуг, который выглядит примерно так:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class MacroServiceProvider extends ServiceProvider {

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        require base_path() . '/resources/macros/macro1.php';
        require base_path() . '/resources/macros/macro2.php';
        // etc...
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

}
person David Collingwood    schedule 13.02.2015
comment
чтобы добавить к этому, если вы используете следующее в методе загрузки: foreach(glob(base_path('resources/macros/*.macro.php')) as $filename){ require_once($filename); } вы можете автоматически загружать все файлы ‹file›.macro.php, устраняя необходимость обновления поставщика - person PottyBert; 08.06.2015
comment
Этот подход работал у меня в Laravel 5.1. Спасибо. Это сводило меня с ума. - person racl101; 29.12.2015

Вы можете сделать это так же, как в Laravel 4.

Поместите файл macros.php в папку /app.

Затем в своем composer.json вы делаете это

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "app/macros.php"  <-- Put this here
        ]
    },
person Laurence    schedule 05.02.2015
comment
Я пытался добавить use Html; в файл макросов, но все равно получаю фатальную ошибку PHP: класс 'Html' не найден в /srv/.....macros.php в строке 4. Нужно ли как-то загружать класс? - person haheute; 05.02.2015
comment
Да — это указано в руководстве по обновлению здесь — laravel.com/docs/5.0/upgrade #upgrade-5.0 — прокрутите вниз до раздела "Помощники по формам и HTML" - person Laurence; 05.02.2015
comment
У меня уже были установлены Form & HTML Helpers ранее, как в ссылке. Это уже сработало. Только с тех пор, как я добавил app/macros.php в composer.json, когда я запускаю composer update, я получаю белый экран и вывод cli PHP. Неустранимая ошибка: класс «Html» не найден в /srv/http/site5/app/macros.php в строке 3. Вот почему я подумал, что, возможно, некоторые namespace или use могут отсутствовать в macros.php. Класс тот же (Html) со строчными буквами в массиве псевдонимов и в macros.php. Приложение названо, и это имя также присутствует в composer.json (psr-4). - person haheute; 05.02.2015
comment
Попробовать \Html::macro('...? - person Laurence; 05.02.2015
comment
Изменено на \Html::macro('.. и перемещено на 1 строку ниже, чтобы увидеть, "прочитано" ли оно, но: php artisan optimize PHP Fatal error: Class 'Html' not found in /srv/http/site5/app/macros.php on line 4 :( composer dump-autoload не выдает ошибку, но composer update ту же ошибку, что и команда artisan - person haheute; 05.02.2015
comment
Класс HTML не загружен на этом этапе вашего цикла приложения, создайте поставщика услуг и потребуйте его там. - person Kevin Op den Kamp; 06.03.2015