• Час читання ~2 хв
  • 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');

Я отримав таку помилку: Рішення: Передача в якості третього аргументу методу Route::apiResource може бути досягнута options за допомогою такого синтаксису:

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

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

Laravel apiresource array Приклад коду, При оголошенні маршрутів ресурсів, які будуть споживатися API, ви зазвичай захочете виключити маршрути, які представляють HTML-шаблони, такі як "create" і "edit" ...

Laravel API Ресурс: Завантаження відносин правильним способом

Відвідайте https://acadea.io/learn, щоб отримати більше уроків та вмісту! Приєднуйтесь до моєї розсилки тут, щоб отримувати НАЙКРАЩІ оновлення: https://sendfox.com/acadeaSupport мене: https://ww

Спосіб згрупувати ресурс API в 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']);
});

Ви можете зробити це так:

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 з 'тільки'?, Я створюю 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()" була викликана для нульового члена.

Підсумовуючи, якщо вам не цікаво читати всю історію, ви можете просто виконати ці кроки.

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 як базовий фреймворк, я можу вивчити доступні варіанти завдяки його параметричній природі параметрів.

/**
 * 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));
}

Laravel API Ресурс: Завантаження відносин правильним способом, Відвідайте https://acadea.io/learn, щоб отримати більше уроків та вмісту! Приєднуйтесь до моєї розсилки тут, щоб отримувати НАЙКРАЩІ оновлення: https://sendfox.com/acadeaSupport мене: https://ww

ресурс Laravel API, колиLoaded не працює належним чином з іншими значеннями

Я прагну надати параметр для маршруту 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, коли атрибут телефону не потрібен.

Чи є моє використання методу henLoaded неправильним? По суті, логіка говорить, що якщо зв'язок контактів завантажений, отримайте атрибут phone, в іншому випадку утримайтеся від цього.

Щоб уникнути негайного виконання другого аргументу, можна передати в метод викликану функцію.

Ви повинні структурувати його таким чином:

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