Разработка пакета Laravel: путь к подсказке не определен - PullRequest
0 голосов
/ 01 октября 2019

Я написал пакет CMS и пишу дополнительный модуль для добавления функциональности событий.

Оба этих пакета используют библиотеку Laravel Breadcrumbs .

Это часть поставщика услуг для модуля событий:

class EventsServiceProvider extends ServiceProvider
{
    // boot method

    // register method
    public function register()
    {
       $this->loadRoutesFrom(__DIR__ . '/routes/web.php');
    }
}

Панировочные сухари для основного пакета CMS работают нормально, пока я не попытаюсь загрузить дополнительные маршруты для этого модуля модуля событий:

public function register()
{
    $this->loadRoutesFrom(__DIR__ . '/routes/web.php');
    $this->loadRoutesFrom(__DIR__ . '/routes/breadcrumbs.php');
}

Это затем останавливает работу всех маршрутов хлебных крошек, и возникает следующая ошибка:

Не указан путь подсказки для [хлебных крошек]. (Просмотр: / Пользователи / ***** / Сайты / **** / CMS (Пакет) /src/views/admin/news/create.blade.php)

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Я получил эту работу, проверив класс и загрузив маршруты в методе boot:

public function boot(Router $router)
{
  if (class_exists('Breadcrumbs')) {
       require __DIR__ . '/routes/breadcrumbs.php';
    }
}
0 голосов
/ 01 октября 2019

TL; DR

Вы пытаетесь загрузить файл маршрутов breadcrumps из той же директории вашего пакета, используя __DIR__

Ссылка на файл из базового пути

$this->loadRoutesFrom(base_path('routes/breadcrumbs.php'));

Сам пакет ссылается на него таким образом, см. source

Объяснение

__DIR__ - предопределенная магическая константа в PHP, см. Документы

__DIR__ The directory of the file. If used inside an include,
the directory of the included file is returned.
This is equivalent to dirname(__FILE__).
This directory name does not have a trailing slash unless it is the root directory.

Выводит родительский каталог файла, в котором он выполняется, относительно

Пример
При такой структуре каталогов

~/test ✹ ★ ᐅ  tree 
.
├── folder
│   └── file.php
├── index.php
└── routes
    └── breadcrumps.php

file.php

<?php

echo __DIR__ . '/routes/breadcrump.php';

Выходы

/home/caddy/test/folder/routes/breadcrump.php

Это неверный путь, routes каталог НЕ внутри folder

Однако index.php (переименованная копия file.php) выдает

/home/caddy/test/routes/breadcrump.php

Это правильно, так как это относительный путь, индекс находится в родительском каталоге routes

Решение?

Использовать base_path () вспомогательную функцию, так как вы используете Laravel

Функция base_path возвращаетполный путь к корню проекта. Вы также можете использовать функцию base_path для генерации полного пути к заданному файлу относительно корневого каталога проекта:

$path = base_path();

$path = base_path('vendor/bin');

Выводит относительный путь к вашему файлу index.php в публичном каталоге, возвращаясь назадодин шаг, который является корнем вашего приложения

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...