• Czas czytania ~4 min
  • 08.11.2023

Obecnie w ten sposób definiuję swoje trasy. Po zapoznaniu się z dokumentacją kontrolera Laravela odkryłem metodę, która pozwala mi tworzyć kilka zasobów api jednocześnie. Oto jak możesz to zrobić, a dodatkowe informacje możesz znaleźć na stronie dokumentacji. Próbuję uprościć proces rejestrowania zasobów API dla mojego API opartego na Laravel.

Jak używać parametru trasy apiResource z klauzulą where w laravelu

Pytanie:

Zamierzam podać parametr dla trasy apiResource i ograniczyć dozwolone wartości za pomocą klauzuli where, ale napotkałem problem z laravel throw .

Route::apiResource('/admin/{category}/attributes', 'AttributeController')
   ->where('category', 'industries|professions|studies|experiences|locations');

Pojawia się ten błąd: Rozwiązanie: Przekazanie options jako trzeciego argumentu Route::apiResource do metody można osiągnąć za pomocą następującej składni:Tablica zasobów apizasobów Laravela Przykład kodu, Podczas deklarowania tras zasobów, które będą używane przez interfejsy API, często będziesz chciał wykluczyć trasy, które prezentują szablony HTML, takie jak "create" i "edit" ...

> BadMethodCallException Method
> Illuminate\Routing\PendingResourceRegistration::where does not exist.

Laravel API Resource:

Route::apiResource('/admin/{category}/attributes', 'AttributeController', [
    'where' => ['category' => 'industries|professions|studies|experiences|locations']
]);

Wczytywanie relacji we właściwy sposób

Odwiedź https://acadea.io/learn, aby uzyskać więcej lekcji i treści! Dołącz do mojego newslettera tutaj, aby otrzymywać NAJLEPSZE aktualizacje: https://sendfox.com/acadeaSupport mnie: https://ww

Sposób na grupowanie zasobów API w laravel 8?

Pytanie:

Zasadniczo szukałem skutecznej metody kategoryzacji tych tras w Laravel 8. Oczywiste jest, że Route::apiResource() jest replikowana, co oznacza, że powinno istnieć alternatywne podejście, aby to osiągnąć.

Route::middleware('auth:api')->group(function () {
    Route::post('logout', [AuthController::class, 'logout'])->name('logout');
    Route::apiResource('stores', StoreController::class);
    Route::apiResource('books', BookController::class);
    Route::apiResource('companies', CompanyController::class);
    Route::apiResource('users', UserController::class);
    Route::apiResource('posts', PostController::class);
    Route::apiResource('projects', ProjectController::class);
    Route::apiResource('category_projects', CategoryProjectController::class);
    Route::apiResource('parent_category_projects', ParentCategoryProjectController::class);
    Route::apiResource('child_category_projects', ChildCategoryProjectController::class);
    Route::post('books/{book}/ratings', [RatingController::class, 'store']);
});

Laravel API Resource:

Możesz to zrobić w ten sposób:

Route::apiResources([
    'stores' => StoreController::class,
    'books'=> BookController::class,
    'companies' => CompanyController::class,
    'users' => UserController::class,
    'posts' => PostController::class,
    'projects' => ProjectController::class,
    'category_projects'=> CategoryProjectController::class,
    'parent_category_projects' => ParentCategoryProjectController::class,
    'child_category_projects' => ChildCategoryProjectController::class
]);

Ta konkretna sekcja strony dokumentacji zawiera czytelnikom informacje do przejrzenia.

Laravel - jak używać metody apiReources z 'tylko'?, tworzę api z Laravelem i szukam łatwego, leniwego sposobu na rejestrację zasobów Api. Obecnie definiuję swoje trasy w ten sposób: ...

Jak używać metody apiReources z 'tylko'?

Pytanie:

Gdy tworzę interfejs API za pomocą Laravela, szukam łatwego, leniwego podejścia do rejestrowania zasobów API. Moja obecna praktyka polega na definiowaniu tras w następujący sposób:

Route::apiResource('categories', 'CategoryController')->only(['index', 'show']);

Przeglądając dokumentację, natknąłem się na , który oferuje mi sposób na apiResources efektywny dostęp do wielu zasobów API za pomocą tylko jednego wywołania metody. Szczególnie interesuje mnie sprawdzony kontroler Laravela pod kątem tej funkcjonalności.

Celem jest wykorzystanie apiResources w połączeniu z only podejściem.

Route::apiResources(['categories' => 'CategoryController', 'products' => 'ProductController'])->only(['index', 'show']);

bieżący wynik:

Funkcja "only()" została wywołana na pustym elemencie członkowskim.

Laravel API Resource:

Podsumowując, jeśli nie jesteś zainteresowany przeczytaniem całej historii, możesz po prostu wykonać następujące kroki.

Route::apiResources(['brands' => 'BrandController', 'categories' => 'CategoryController'], ['only' => ['index', 'show']]);

Pisząc pytanie, przypomniałem sobie o zweryfikowaniu deklaracji dla apiResources . Po wykonaniu tej czynności odkryłem następujące informacje:

   /**
     * Register an array of API resource controllers.
     *
     * @param  array  $resources
     * @param  array  $options
     * @return void
     */
    public function apiResources(array $resources, array $options = [])
    {
        foreach ($resources as $name => $controller) {
            $this->apiResource($name, $controller, $options);
        }
    }

Wykorzystując apiResource jako podstawową strukturę, jestem w stanie zbadać dostępne opcje ze względu na charakter parametru opcji przekazywania.

/**
 * Route an API resource to a controller.
 *
 * @param  string  $name
 * @param  string  $controller
 * @param  array  $options
 * @return \Illuminate\Routing\PendingResourceRegistration
 */
public function apiResource($name, $controller, array $options = [])
{
    $only = ['index', 'show', 'store', 'update', 'destroy'];
    if (isset($options['except'])) {
        $only = array_diff($only, (array) $options['except']);
    }
    return $this->resource($name, $controller, array_merge([
        'only' => $only,
    ], $options));
}

Wczytywanie relacji we właściwy sposób, Odwiedź https://acadea.io/learn, aby uzyskać więcej lekcji i treści! Dołącz do mojego newslettera tutaj, aby otrzymywać NAJLEPSZE aktualizacje: https://sendfox.com/acadeaSupport mnie: https://ww

zasób API Laravel, gdy załadowany nie działa poprawnie z innymi wartościami

Pytanie:

Pracując z zasobami API, zamierzam włączyć dodatkową logikę. Zasób, z którym obecnie mam do czynienia, jest następujący:Połączenie contacts obejmuje relację "jeden do wielu",

return [
    'id' => $this->id,
    'name' => $this->name,
    'contacts' => $this->whenLoaded('contacts'),
    'phone' => $this->whenLoaded('contacts',
        $this->contacts->where('type', '=', 'phone')->first()
            ? $this->contacts->where('type', '=', 'phone')->first()->value
            : null),
];

która zapewnia różne opcje kontaktu (telefon, takie jak e-mail, telefon i inne.

Zdecydowałem się dołączyć atrybut "telefon", który wypisze kontakt telefoniczny .

Kod działa poprawnie, ale problem polega na tym, że atrybut phone jest ładowany konsekwentnie, nawet jeśli relacja "kontakty" nie jest ładowana. Ma to negatywny wpływ na wydajność, ponieważ prowadzi do problemu N+1, gdy atrybut phone nie jest wymagany.

Czy moje użycie metody whenLoaded jest wadliwe? Zasadniczo logika mówi, że jeśli relacja kontaktów jest załadowana, uzyskaj atrybut phone, w przeciwnym razie powstrzymaj się od tego.

Laravel API Resource:

Aby uniknąć natychmiastowego wykonania drugiego argumentu, można przekazać funkcję wywoływaną do metody.

Musisz to ustrukturyzować w ten sposób:

return [
    'id' => $this->id,
    'name' => $this->name,
    'contacts' => $this->whenLoaded('contacts'),
    'phone' => $this->whenLoaded('contacts', function() {
        return object_get($this->contacts->where('type', 'phone')->first(), 'value');
    })
];

Oprócz object_get() , wprowadziłem również pewne uproszczenie.

Laravel 8 - Zasoby API dla początkujących (10 kroków), Ponieważ budujemy API, używamy apiResource() do generowania tras tylko API. Definiujemy również trasę, która będzie używana do oceny ...

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297