Издательские активы Laravel 5

Я использую Laravel 5, и я хочу опубликовать twitter bootstrap CSS и JS в общий каталог. Я использовал Composer для получения пакета twitter/bootstrap, и эта часть прошла нормально, поэтому файлы, которые я хочу, теперь находятся в поставщике /twitter/bootstrap/dist

Но я не могу заставить его работать. Я получаю "Нечего публиковать". сообщение каждый раз, когда я пытаюсь.
Вот шаги, которые я сделал:

  • использовать ремесленник для генерации класса: php artisan make:provider BootstrapServiceProvider

  • отредактируйте метод boot() в этом классе

  • зарегистрировать поставщика услуг в config/app.php
    providers => [...
    'App\Providers\BootstrapServiceProvider',
    ],

Bellow - это мой сгенерированный файл с классом, и он отредактировал метод boot().

BootstrapServiceProvider.php

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class BootstrapServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     * Move twitter bootstrap CSS and JS into public directory
     *
     * @return void
     */
    public function boot()
    {
        $this->publishes([
                     __DIR__ . 'vendor/twitter/bootstrap/dist' => public_path('vendor/bootstrap'),
        ], 'public');
    }

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

}

Я пытался:

php artisan vendor:publish --tag=public
php artisan vendor:publish --tag=public --force
php artisan vendor:publish
php artisan vendor:publish --force

А также попытался удалить второй 'public' параметр из метода boot().

Каждый раз, когда я получаю ничего, чтобы публиковать. ,

boot() даже не вызван. Что мне нужно сделать, чтобы заставить его работать?
Может быть, поместить что-то в метод register()? Сейчас просто пусто.
Или какой-то другой шаг?

Ответ 1

Чтобы ответить на мой вопрос.

После переустановки Laravel с 5.0.26 до 5.0.25 все сработало.
Даже после его обновления до 5.0.26 и выше он все еще работает.

Я не знаю, почему это не сработало до обновления композитора.

Все остальное такое же, как и выше, за исключением того, что метод boot() должен быть исправлен, чтобы указывать на правильный путь поставщика при вызове publishes().

Исправлена версия boot():

public function boot()
{
    $this->publishes([
        __DIR__ . '/../../vendor/twitter/bootstrap/dist' => public_path('vendor/bootstrap'),
    ], 'public');
}

Чтобы автоматизировать все это, добавьте эти записи в файл composer.json в scripts: раздел "post-install-cmd" и "post-update-cmd":

"scripts": {
    "post-install-cmd": [
          "...",
          "php artisan vendor:publish --tag=public --force"
    ],
    "post-update-cmd": [
          "...",
          "php artisan vendor:publish --tag=public --force"
    ],
},

Ответ 2

Как установить Bootstrap в Laravel с помощью композитора

Хотя прошло уже год с момента публикации этого вопроса, я считаю, что мой ответ поможет кому-то помочь. Это отлично работает для меня.

Я использую Laravel Framework версии 5.2.31 (сделайте php artisan --version чтобы проверить версию Laravel). Выполните следующие действия:

  1. Откройте терминал и запустите composer require twbs/bootstrap 3.3.6. Если вам нужна другая версия из 3.3.6, проверьте последнюю версию дистрибутива на странице https://packagist.org/packages/twbs/bootstrap.
  2. Создайте класс провайдера Bootstrap с помощью команды artisan: php artisan make:provider BootstrapServiceProvider
  3. Откройте класс поставщика услуг Bootstrap в app/Providers/BootstrapServiceProvider.php. Измените метод boot() следующим образом:

    public function boot() { $this->publishes([base_path('vendor/twbs/bootstrap/dist') => public_path('vendor/bootstrap')],'public'); }

    Приведенный выше код даст указание artisan скопировать каталог vendor/twbs/bootstrap/dist в public/vendor/bootstrap.

  4. зарегистрируйте поставщика услуг в config/app.php, добавив DealerPortal\Providers\BootstrapServiceProvider::class, под список поставщиков прикладных услуг

  5. Запустить vendor:publish --tag=public --force для выполнения этой задачи.

Бонусный шаг:

Если вы хотите автоматизировать процесс публикации Bootstrap, добавьте php artisan vendor:publish --tag=public --force в post-install-cmd и post-update-cmd раздел вашего файла composer.json.

Ответ 3

Настройка пути ниже работала для меня: (спасибо за остальную часть ответа)

public function boot()
{
    $this->publishes([
    vendor/twitter/bootstrap/dist' => public_path('vendor/bootstrap'),
    ], 'public');
}

Ответ 4

Это также может быть вызвано кешем конфигурации. если вы получите эту собственную ошибку, используйте конфигурацию php artisan: clear

и повторите попытку поставщика php-artisan: опубликуйте