Nazwy tras oraz kontrolerów dla zasobów

Odpowiedz Nowy wątek
2018-12-05 19:20
0

Słuchajcie mam pewien dylemat jak czytelnie i logicznie nazywać trasy oraz kontrolery. Przykładowo mam 2 powiązane ze sobą modele:

  1. User
  2. Car

Relacje:
User może mieć 1 lub wiele Car.
Car należy tylko do 1 User.

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Http\Request;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;

    protected $fillable = [
        'username', 'email', 'password'
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function cars()
    {
        return $this->hasMany(Car::class);
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Car extends Model
{
    protected $fillable = [
        'user_id', 'name'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Myślałem aby stworzyć resource controllers i w tabeli routes dodać:

Route::resource('users', 'UsersController');
Route::resource('posts', 'PostsController');

i wtedy mam trasy w stylu

/users
/users/create
/users/1
/users/1/edit
itd

/cars
/cars/create
/cars/1
/cars/1/edit
itd

nie mniej jednak założyłem sobie, że obiekt Car nie może istnieć bez User czyli skłaniam się do tras tego typu

/users/1/cars
/users/1/cars/1
/users/1/cars/1/edit
itd

czyli dla każdego użytkownika będę mógł sprawdzić jakie ma samochody. Ogólnie chciałbym również mieć route przeznaczony tylko dla administratora, który będzie mógł wyświetlać wszystkich User oraz Car, czyli mieć trasy: /users oraz /cars. Nie wiem jednak jak się do tego zabrać i czy ma to sens.

Moglibyście doradzić jak logiczne dobrać nazwy tras tak aby można było łatwo i intuicyjnie sprawdzać np. Cars danego User?

Pozostało 580 znaków

2018-12-05 19:26

czyli skłaniam się do tras tego typu (...)

Jakie zalety ma Twoje podejście nad zwyczajnym /cars/{id}?

Jak widać, sprawia ono trochę problemów, a dodatkowo powoduje, że:

  • będziesz miał ogromny problem przemigrować aplikację, jeśli kiedykolwiek w przyszłości okaże się, że jednak chcesz mieć samochody bez użytkowników (chyba że należysz do tego grona deweloperów, którzy potrafią przewidywać przyszłość i uporczywie twierdzą przecież z całą pewnością nigdy nie będziemy tego potrzebować! ;-)),
  • jest upierdliwe, bo w każdym miejscu, gdzie wystarczyłoby przekazać id samochodu, będziesz musiał przekazywać id użytkownika oraz id samochodu,
  • jest upierdliwe, bo w każdym miejscu kontrolera musiałbyś dodać walidację sprawdzającą czy na pewno id samochodu odnosi się do wskazanego użytkownika,
  • no i ogólnie to id użytkownika nie wnosi żadnej dodatkowej ani potrzebnej informacji, bo i tak już je znasz z modelu samochodu.

Moglibyście doradzić jak logiczne dobrać nazwy tras tak aby można było łatwo i intuicyjnie sprawdzać np. Cars danego User?

GET /users/{id} zwracające dane użytkownika, w tym informacje o jego samochodach (choćby miały być to same idki czy idki + nazwy).


edytowany 1x, ostatnio: Patryk27, 2018-12-05 19:27
OK, zastosuję się do twoich rad. Po przeanalizowaniu chyba faktycznie takie podejście będzie dobre. - linuxf 2018-12-05 20:22

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0