Frameworki a autocomplete w IDE (laravel)

0

Cześć,

Obecnie jestem związany z Javą, ale pozwoliłem sobie zerknąć na frameworki php i komfort pisania w tej technologii.
Wybór padł na Laravel framework oraz IDE Visual Studio code. Po zainstalowaniu dodatkowych zalecanych wtyczek z powodzeniem stworzyłem pierwszy Route path.
Potem controller, migracja, model ... i mnie trochę zirytował brak podpowiedzi do Eloquent.
Brakuje podpowiedzi do statycznych metod jak find, findOrFail, ....
Tak samo w klasie modelowej nie ma zdefiniowanych pól, przez co też muszę wracać do schematu tabeli, żeby sprawdzić jak co się nazywało.
Zakładam, że powyższe dane generują się podczas runtime, ale zastanawia mnie jakie są wasze rozwiązania na te niedogodności kiedy zajmujecie się tym zawodowo.

Jak macie np 60 encji i przychodzi ktoś nowy do zespołu to karzecie mu / jej przeglądać migrację, albo zalogować się do bazy i nauczyć się schematu?
Fakt, że z czasem funkcję Eloqent'a się pewnie zapamiętuję, ale dla mnie jako świeżaka jest to trochę uciążliwe.
Może sami jakoś dopisujecie definicje modeli?

Próbowałem też z PHPStorm, ale tam nie jest lepiej.
Czy podobne niegodności mają też inne frameworki PHP?

3

Laravel jest o tyle specyficzny, że tam niemal wszystko zostało wypchnięte do runtime'u, co - jak zauważyłeś - rzuca kłody pod nogi narzędziom próbującym wykonać statyczną analizę kodu.

Jeśli chodzi o modele, dla mnie pomocne było manualne oznaczenie pól oraz związków (PHPStorm rozumie to bez problemu, nie wiem jak VSCode):

/**
 * @property-read int $id
 * @property string $title
 * @property Category $category
 * @property Tags[]|EloquentCollection $tags
 */
class Post extends Model {
    /* ... */
}

... a problem find() itd. rozwiązałem poprzez tworzenie repozytoriów :-) Choć z praktyki mogę powiedzieć, że niestety active record oraz repozytoria nie idą w parze, przez co niejednokrotnie w efekcie otrzymywałem średnio ergonomiczny, niezbyt laravelowy kod; sugerowałbym popróbować i zobaczyć jak się z tym czujesz.

Pracując z PHPStormem, wykorzystywałem jeszcze https://github.com/barryvdh/laravel-ide-helper.

3

Doinstaluj sobie przez Composera
Laravel_ide_helper jak nie masz i powinno działać, przynajmniej w PHPSTORM.
Widzę @Patryk27 dodał informację o tej paczce.

2

VSC też rozumie takie komentarze :) Super, zaraz spróbuję z wtyczką — impimp94

Ide_helper właśnie wygeneruje taka dokumntacje jak wpomniana. Po co to pisać ręcznie :)
Niestety możesz mieć problem ze zmiennymi w pętlach.
Wtedy użyj innej konstrukcji.
Np.

$array = User:all();
// Może Ci nie wykryć że w pętli odnosisz się do obiektu User, wtedy dodaj komentarz z PHP dość.

/* @var App\Models\User $user */ 
foreach ($array as $user)
{
    echo $user->name;
}
0

VSC akceptuje dokumentację wraz z metodami wygenerowanymi przez wspomniany powyżej plugin.

/**
 * App\Models\Task
 *
 * @property-read int $id
 * @property string $name
 * @property string $desc
 * @property \Illuminate\Support\Carbon|null $created_at
 * @property \Illuminate\Support\Carbon|null $updated_at
 * @method static \Illuminate\Database\Eloquent\Builder|Task newModelQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Task newQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Task query()
 * @method static \Illuminate\Database\Eloquent\Builder|Task whereCreatedAt($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Task whereDesc($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Task whereId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Task whereName($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Task whereUpdatedAt($value)
 * @mixin \Eloquent
 * @mixin IdeHelperTask
 */
class Task extends Model
{
    use HasFactory;
}

screenshot-20210306133440.png
Nie widzi natomiast innych funkcji eloequent.

W PHPStorm jak wyżej z jedną różnicą, że widać inne funkcje Eloqent. Co jest na plus! ;)
screenshot-20210306133658.png

W obu programach to usprawnia pracę. Dzięki! ;)

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