Как переопределить функцию resourcePath (), определенную в Illuminate / Foundation / Application.php - PullRequest
0 голосов
/ 25 сентября 2019

Я модульный Laravel.Я решил переместить все стандартные маршруты, контроллеры, ресурсы и т. Д. В / app / Modules / Pub.По большей части это сработало хорошо.Однако я хотел бы изменить путь ресурсов по умолчанию приложения.К сожалению, это не кажется (легко) настраиваемым.

Итак ... используя grep, я смог отследить функцию resource_path() до /var/www/sigma/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php

Я думаю, что это возможночтобы где-то переопределить эту функцию, но это похоже на хак на низком уровне, поскольку эта функция состоит просто из:

app()->resourcePath($path)

Снова используя grep, я обнаружил, что эта функция находится в /var/www/sigma/vendor/laravel/framework/src/Illuminate/Foundation/Application.php

Похоже, что это нужно изменить, поскольку оно не ссылается на какое-либо значение конфигурации, скорее это значение жестко запрограммировано:

return $this->basePath.DIRECTORY_SEPARATOR.'resources'.($path ? DIRECTORY_SEPARATOR.$path : $path);

Но я думаю, что можно с уверенностью предположить, что довольно глупо что-либо менять у поставщикапапка вручную.Очевидно, мне нужно где-то переопределить эту функцию.Мне неясно, где и как это сделать

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Создайте новый Application класс, который расширяет \Illuminate\Foundation\Application:

<?php

namespace <YOUR NAMESPACE HERE>;

class ApplicationCustom extends \Illuminate\Foundation\Application
{
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Get the path to the resources directory.
     *
     * @param  string  $path
     * @return string
     */
    public function resourcePath($path = '')
    {
        // Implement the custom method
    }
}

Теперь просто измените файл bootstrap/app.php, чтобы использовать пользовательский класс:

$app = new YOUR_NAMESPACE\ApplicationCustom(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

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

1 голос
/ 25 сентября 2019

Вы можете создать класс где-нибудь в своем проекте и расширить класс \Illuminate\Foundation\Application по умолчанию.Затем переопределите необходимые методы и переключите класс, созданный в bootstrap/app.php, на свой собственный.

...