Передать параметр id в ресурс в Laravel - PullRequest
0 голосов
/ 30 апреля 2018

У меня в контроллере Laravel следующий метод:

public function specialOffers($id) {
    return \App\Http\Resources\SpecialOfferResource::collection(Offers::all());
}

Мне нужны специальные манипуляции, поэтому я создал этот ресурс SpecialOfferResource. Код ресурса:

class SpecialOfferResource extends Resource {
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request $request
     * @return array
     */
    public function toArray($request) {

        //here I need the $id passed to the controller's method,
        //but I only have $request

        return [
            //my request fields, everything ok
        ];

    }
}

Как я могу передать $ id из метода контроллера этому ресурсу? Я знаю, что могу пройти через запрос как поле, но возможно ли это другим способом?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я не уверен, является ли это приемлемым или нет, но в некоторых случаях мне нужен какой-то параметр, переданный из контроллера, для использования внутри метода ресурса toArray, и это то, что я сделал.

Создание класса ресурсов, расширяющего Illuminate\Http\Resources\Json\ResourceCollection.

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class TestResource extends ResourceCollection
{
   private $id;

   public function __construct($id, $collection)
   {
      parent::__construct($collection);
      $this->id = $id;
   }

   public function toArray($request)
   {
      return [
         'data' => $this->collection,
         'id' => $this->id
      ];
   }
 }

И с контроллера вы можете позвонить так:

<?php

namespace App\Http\Controllers;

use App\Http\Resources\TestResource;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;

class TestController extends Controller
{
   public function index()
   {
      $id = 30;
      $collection = collect([['name' => 'Norli'], ['name' => 'Hazmey']]);

      return new TestResource($id, $collection);
   }
}
0 голосов
/ 30 апреля 2018

Коллекция ресурсов - это просто оболочка, которая форматирует или отображает коллекцию, которую вы ей передаете.

Передаваемая вами коллекция Offers::all(), которая будет включать все модели предложений.

Скорее всего, вы захотите использовать построитель запросов, чтобы сузить передаваемую коллекцию:

public function specialOffers($id) {
    $results = Offers::where('column', $id)->get();
    return \App\Http\Resources\SpecialOfferResource::collection($results);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...