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.
Spis treści
- Jak używać parametru trasy apiResource z klauzulą where w laravelu
- Sposób na grupowanie zasobów api w laravel 8?
- Jak używać metody apiReources z 'tylko'?
- Zasób API Laravel, gdy załadowany nie działa poprawnie z innymi wartościami
- Co to jest zasób API Laravel?
- Co to jest parametr post w metodzie zasobu w Laravel?
- Jak utworzyć zasób książki w Laravel?
- Jaki jest adres URL umożliwiający dostęp do metody create() w 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 ...