• Время чтения ~3 мин
  • 08.11.2023

В настоящее время я определяю свои маршруты таким образом. Ознакомившись с документацией контроллера Laravel, я обнаружил метод, который позволяет мне создавать несколько ресурсов api одновременно. Вот как вы можете это сделать, и вы можете найти дополнительную информацию на странице документации. Я пытаюсь упростить процесс регистрации ресурсов Api для моего API на основе 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. Кроме того, мы определяем маршрут, который будет использоваться для оценки ...

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

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...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297