Laravel, функция вызова из класса возвращает нулевое значение - PullRequest
0 голосов
/ 04 мая 2020

Как получить значения из функции ниже, если я хочу поместить ее в класс? На самом деле, если я вызвал его непосредственно из контроллера, он работает нормально, но когда я вызвал его из класса, он возвращает нулевое значение, пожалуйста, помогите мне. Просто мне нужно добавить это в экранную функцию в классе, поэтому нет необходимости повторять код внутри контроллера много раз обратите внимание, что в функции контроллера он работает нормально, но в классе он возвращает нулевое значение enter image description here

Класс:

public function getStoresDistance($allstores)
{
    $stores = collect([]);
    foreach (session('storeinfo') as $storeInfo) {
        $store = $allstores->find($storeInfo['id']);
        if ($store) {
            $store->distance = $storeInfo['distance'];
            $stores[] = $store;
            if (!Collection::hasMacro('paginate')) {
                Collection::macro('paginate', function ($perPage = 25, $page = null, $options = []) {
                    $options['path'] = $options['path'] ?? request()->path();
                    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);

                    return new LengthAwarePaginator(
                        $this->forPage($page, $perPage)->values(),
                        $this->count(),
                        $perPage,
                        $page,
                        $options
                    );
                });
            }
        }
    }
}

вызов из контроллера:

$allstores = Storeinfo::where('show', 'y')->get();
$findstores = Helper::getStoresDistance($allstores);

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Если функция является общей для нескольких контроллеров, переместите ее в черту PHP. Черты специально разработаны для повторного использования. Затем вы можете использовать эту черту в вашем контроллере и вызывать его функцию так же, как если бы ваш контроллер работал следующим образом: $this->yourFunction(). Ниже будет выглядеть ваш код:

Черта:

trait StoresDistance
{
    public function storesDistance(){}
}

Контроллер:

class YourController extends Controller
{
    use StoresDistance;

    public function getStoresDistance($allstores)
    {
         // some code
         $this->storesDistance();
         // some code
    }
}

Справочные документы : https://www.php.net/manual/en/language.oop5.traits.php

0 голосов
/ 04 мая 2020

Вам нужно «вернуть» функцию, которую вы хотите вызвать (вернуть данные для отправки / вызова)

просто введите «Class :: function» внутри вашего класса, как это

class ExampleController extends Controller
{

public function yourController()
{
    $allstores = Storeinfo::where('show', 'y')->get();
    $findstores = ExampleController::getStoresDistance($allstores);
    return $findstores;
}

public function getStoresDistance($allstores)
{
    $stores = collect([]);

    return session('storeinfo');
    foreach (session('storeinfo') as $storeInfo) {
        $store = $allstores->find($storeInfo['id']);
        if ($store) {
            $store->distance = $storeInfo['distance'];
            $stores[] = $store;
            if (!Collection::hasMacro('paginate')) {
                Collection::macro('paginate', function ($perPage = 25, $page = null, $options = []) {
                    $options['path'] = $options['path'] ?? request()->path();
                    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);

                    return new LengthAwarePaginator(
                        $this->forPage($page, $perPage)->values(),
                        $this->count(),
                        $perPage,
                        $page,
                        $options
                    );
                });
            }
        }
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...