В настоящее время я определяю свои маршруты таким образом. Ознакомившись с документацией контроллера Laravel, я обнаружил метод, который позволяет мне создавать несколько ресурсов api одновременно. Вот как вы можете это сделать, и вы можете найти дополнительную информацию на странице документации. Я пытаюсь упростить процесс регистрации ресурсов Api для моего API на основе Laravel.
Содержание
- Как использовать параметр маршрута apiResource с предложением where в laravel
- Как сгруппировать api Resource в laravel 8?
- Как использовать метод apiReources с 'only'?
- Ресурс API Laravel whenLoaded не работает должным образом с другими значениями
- Что такое ресурс API Laravel?
- Что такое параметр post в методе resource в Laravel?
- Как создать книжный ресурс в Laravel?
- Какой URL-адрес для доступа к методу create() в Laravel?
Как использовать параметр маршрута apiResource с предложением where в laravel Вопрос:
Я стремлюсь предоставить параметр для маршрута apiResource и ограничить допустимые значения с помощью предложения where, но столкнулся с проблемой с laravel
throw.
Route::apiResource('/admin/{category}/attributes', 'AttributeController')
->where('category', 'industries|professions|studies|experiences|locations');
Я получил эту ошибку: Решение: Передача
options
в качестве третьего аргумента методу
Route::apiResource
может быть достигнута с помощью следующего синтаксиса:Пример кода массива apiresource Laravel, При объявлении маршрутов ресурсов, которые будут использоваться API, вы обычно хотите исключить маршруты, которые представляют HTML-шаблоны, такие как "create" и "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']
]);
Правильная
загрузка отношенийПосетите https://acadea.io/learn чтобы получить больше уроков и контента! Подпишитесь на мою рассылку здесь, чтобы получать ЛУЧШИЕ обновления: https://sendfox.com/acadeaSupport мне: https://ww
Способ сгруппировать api Resource в laravel 8?
Я стремлюсь предоставить параметр для маршрута apiResource и ограничить допустимые значения с помощью предложения where, но столкнулся с проблемой с laravel
По сути, я искал эффективный метод категоризации этих маршрутов в Laravel 8. Очевидно, что Route::apiResource() реплицируется, подразумевая, что для достижения этой цели должен быть альтернативный подход.
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:
Вы можете сделать это следующим образом:
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
]);
Этот конкретный раздел страницы документации предоставляет читателям информацию для изучения.
Laravel - как использовать метод apiReources с 'only'?, Я создаю api с помощью Laravel и ищу простой ленивый способ регистрации ресурсов Api. В настоящее время я определяю свои маршруты следующим образом: ...
Как использовать метод apiReources с 'only'?
Я стремлюсь предоставить параметр для маршрута apiResource и ограничить допустимые значения с помощью предложения where, но столкнулся с проблемой с laravel
Когда я разрабатываю API с помощью Laravel, я ищу простой ленивый подход к регистрации ресурсов Api. Моя текущая практика включает в себя определение маршрутов следующим образом:
Route::apiResource('categories', 'CategoryController')->only(['index', 'show']);
Просматривая некоторую документацию, я наткнулся
apiResources
на , который предлагает мне способ эффективного доступа к нескольким ресурсам API с помощью всего одного вызова метода. Меня особенно интересует проверенный контроллер Laravel этим функционалом.
Цель состоит в том, чтобы использовать
apiResources
в сочетании с подходом
only
.
Route::apiResources(['categories' => 'CategoryController', 'products' => 'ProductController'])->only(['index', 'show']);
текущий результат:
Функция "only()" была вызвана для нулевого члена.
Laravel API Resource:
Таким образом, если вы не заинтересованы в прочтении всей истории, вы можете просто выполнить следующие шаги.
Route::apiResources(['brands' => 'BrandController', 'categories' => 'CategoryController'], ['only' => ['index', 'show']]);
Когда я составлял вопрос, я не забыл проверить объявление для
apiResources
. Сделав это, я обнаружил следующую информацию:
/**
* 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);
}
}
Используя
apiResource
в качестве базового фреймворка, я могу исследовать доступные варианты из-за его передающего параметра options.
/**
* 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));
}
Правильная, загрузка отношенийПосетите https://acadea.io/learn чтобы получить больше уроков и контента! Подпишитесь на мою рассылку здесь, чтобы получать ЛУЧШИЕ обновления: https://sendfox.com/acadeaSupport мне: https://ww
ресурс API Laravel whenLoaded не работает должным образом с другими значениями
Я стремлюсь предоставить параметр для маршрута apiResource и ограничить допустимые значения с помощью предложения where, но столкнулся с проблемой с laravel
Поскольку я работаю с ресурсами API, я намерен включить дополнительную логику. Ресурс, с которым я в настоящее время имею дело, выглядит следующим образом:Соединение
contacts
включает в себя отношение «один-ко-многим», которое предоставляет различные варианты связи (телефон, такой как электронная почта,
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),
];
телефон и другие).
Я решил включить атрибут 'phone', который будет выводить телефонный контакт.
Код функционирует правильно, но проблема заключается в том, что атрибут phone загружается последовательно, даже если отношение 'contacts' не загружено. Это отрицательно сказывается на производительности, так как приводит к проблеме N+1, когда атрибут phone не требуется.
Является ли использование метода whenLoaded ошибочным? По сути, логика гласит, что если загружено отношение contacts, получить атрибут phone, в противном случае воздержитесь от этого.
Laravel API Resource:
Чтобы избежать немедленного выполнения второго аргумента, можно передать в метод вызываемую функцию.
Вы должны структурировать его следующим образом:
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');
})
];
В дополнение к
object_get()
, я также реализовал некоторое упрощение.
Laravel 8 - Ресурсы API для начинающих (10 шагов), Поскольку мы создаем API, мы используем apiResource() для генерации маршрутов только API. Кроме того, мы определяем маршрут, который будет использоваться для оценки ...