---
title: "Žiadne názvy tried v API — Testing for Laravel | Roundly"
description: "toExposeNoClassNames() prečíta payload ako klient a zlyhá na akomkoľvek názve PHP triedy v ňom, pričom každý únik uvedie s cestou."
url: https://roundly-consulting.com/sk/open-source/navody/testing-for-laravel/bez-nazvov-tried
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Testing for Laravel](https://roundly-consulting.com/sk/open-source/navody/testing-for-laravel.md)

# Žiadne názvy tried v API

Väčšina hostiteľských aplikácií nemá morph mapu, takže stĺpec \*\_type obsahuje App\\Models\\User — a ak ho pošlete klientovi, prezradíte štruktúru menných priestorov hostiteľa a naviažete na ňu jeho API. Každý súvisiaci model preto vykreslite cez referenčný resource s {id, type: class\_basename} a pripnite to cez toExposeNoClassNames() — alebo Assert::exposesNoClassNames() v čistom PHPUnit:

```php
use Illuminate\Database\Eloquent\Relations\Relation;
use RoundlyConsulting\Testing\Assert;

it('renders the author without a class name', function (): void {
    Relation::morphMap([], merge: false); // no morph map, like most hosts

    $resource = new CommentResource($comment->load('author'));

    expect($resource)->toExposeNoClassNames();                   // the response body, wrapping included
    expect($this->getJson('/comments'))->toExposeNoClassNames(); // a TestResponse
    expect($payload)->toExposeNoClassNames();                    // an array or a JSON string

    Assert::exposesNoClassNames($payload);                       // plain PHPUnit
});
```

## Čo prečíta

| Vstup | Prečíta sa ako |
| --- | --- |
| Reťazec JSON | Dekódovaný; reťazec, ktorý nie je JSON, vyhodí InvalidArgumentException. |
| Pole | Payload tak, ako je. |
| `JsonResource` | toResponse(request()) — telo, ktoré dostane klient, vrátane obalenia do data, with() a additional(). |
| `Response / JsonResponse / TestResponse` | Telo odpovede, dekódované. |

Čokoľvek iné — int, obyčajný objekt — vyhodí InvalidArgumentException.

## Čo zlyhá

Kontroluje sa každý kľúč a každá reťazcová hodnota v ľubovoľnej hĺbke a každý únik sa uvedie s cestou (data.author.type), nielen prvý:

- Názov triedy s menným priestorom kdekoľvek — App\\Models\\User, \\App\\Models\\User, kópia zakódovaná do JSON vnútri reťazca, názov v texte (No query results for model \[App\\Models\\User\]) aj názov použitý ako kľúč. Stačí tvar Vendor\\Name v StudlyCase; reťazec malými písmenami sa počíta, ak trieda naozaj existuje.
- Kľúč \*\_type s triedou, nahlásený ako morph stĺpec — vrátane globálnej triedy bez menného priestoru, ktorý by ju prezradil ("subject\_type": "ArrayObject").
- Nie je čo kontrolovať. Prázdny reťazec, {}, \[\], null, prázdny resource alebo odpoveď bez tela zlyhá: payload bez jedinej hodnoty nedokazuje, že sa niečo vykreslilo.

```php
// Passes — a reference resource's basename, and morph aliases
expect(['id' => 1, 'type' => 'User'])->toExposeNoClassNames();
expect(['subject_type' => 'post', 'payment_type' => 'card'])->toExposeNoClassNames();

// Fails — every leak listed with its path
expect(['data' => ['author' => ['id' => 1, 'type' => 'App\Models\User']]])->toExposeNoClassNames();
// `data.author.type` holds the class name `App\Models\User`

expect(['commentable_type' => 'App\Models\Post', 'commentable_id' => 3])->toExposeNoClassNames();
// the morph type column `commentable_type` holds the class name `App\Models\Post`

expect(['subject_type' => 'ArrayObject'])->toExposeNoClassNames();
// the morph type column `subject_type` holds the class name `ArrayObject`

expect(['message' => 'No query results for model [App\Models\User] 5'])->toExposeNoClassNames();
// `message` holds the class name `App\Models\User`

// Fails — nothing to check
expect([])->toExposeNoClassNames();
// There is nothing to check: the payload is empty, so "it exposes no class names" would pass
// without anything having rendered. Assert on the populated payload.
```

## Čo prejde

- Vlastné {"id": 1, "type": "User"} referenčného resource — type nie je stĺpec \*\_type a základný názov triedy nemá menný priestor.
- Morph alias v stĺpci \*\_type ("commentable\_type": "post").
- Skalárne hodnoty, hodnoty null, URL a cesty s lomkami.

## Obmedzenia

- Cesta vo Windows (C:\\Users\\Jane) vyzerá ako názov triedy a zlyhá — je to únik sám osebe.
- Kontroluje to, čo dostane. Interné formáty na spiatočný prenos — exporty, výkazy účtovnej knihy, payloady vo fronte — pravidlo nemusia spĺňať; nesmerujte ju na ne.
- Podmienku „bez morph mapy“ za vás nenastaví: v teste morph mapu vyprázdnite, inak môže payload obsahovať alias, ktorý zakryje, čo by videl hostiteľ bez nej.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/testing-for-laravel.md)
