Jak vytvořit novou aplikaci
- Mirek
- Člen | 86
Předem se omlouvám za začátečniský dotaz, ale snažím se tomu přijít
na kloub a nějak se mi nedaří.
Chci si vytvořit novou aplikaci postavenou na nette. Takže jsem pomocí
composeru stáhnul celé nette :
composer create-project nette/nette moje.aplikace
pak, abych se podíval jak to funguje, jsem si stáhnul zip soubor s
„web-project“
zjistil jsem, že moje aplikace má jen adresář Nette a vendor, tak jsem
z web-project nakopíroval adresáře app, config, log, temp a www včetně
index.php
no a když jsem si takto vytvořenou aplikaci spustil, tak nezafungoval
autoloader a celé to skončilo s chybou „Class "App\Bootstrap“ not found"
a mě se nepodařilo zjistit, co mám kde změnit, aby se třídy načetly a
spustila se ta ukázková aplikace, abych věděl, kde mám začít budovat tu
mojí novou aplikaci
- Mirek
- Člen | 86
Ano, tam jsem se díval, ale tam je jen to, že máme použít už vytvořený projekt, na který jsem se odkazoval, když jsem psal, že po překopírování adresářů z tohoto projektu mi „můj“ projekt nefunguje, že tam něco chybí, aby zafungoval autoloading
Editoval Mirek (24. 10. 2023 7:53)
- Šaman
- Člen | 2667
Já tam teda čtu něco jiného.
Když víš co děláš, tak instaluješ samostatné baličky (nebo
nette/nette
) do svého projektu.
Když chceš ukázkovou prázdnou aplikaci, tak instaluješ
composer create-project nette/web-project my-project
anebo rovnou
stáhneš ten archív, který obsahuje všechno a vůbec nepotřebuješ
composer.
Nic nikam nepřekopírováváš. Ten composer příkaz z prvního
příspěvku na té stránce nikde není, asi jsi spletl
nette/nette
(samotné knihovny) a nette/web-project
(prázdná kostra aplikace spolu s knihovnami).
- Mirek
- Člen | 86
No a mě právě jde o to, jak vytvořit aplikaci, když si nainstaluji samostatné balíčky, tak jak pak k nim přidat tu vlastní aplikaci, což jsem udělal právě tím pouhým překopírováním složek z té ukázkové aplikace a jak tedy přimět autoloader, aby načítal ty třídy, které jsou v té dané aplikaci
- Šaman
- Člen | 2667
A proč prostě nepoužiješ web-project, nebo ten archiv? To je kostra která funguje. Všechno je nastavené a připravené.
Aby sis to poskládal sám, na to je potřeba vědět jak funguje Nette a
Composer (autoloader je věc Composeru, nikoliv Nette). Nejspíš ti v
composer.json
chybí mapování
tříd.
- Šaman
- Člen | 2667
Tak ti tam možná chybí ten bootstrap. Nebo jsi nedal
composer install
poté, co jsi upravil composer.json
(takže vygenerovaná classmapa composeru o tom stále neví).
Hele, stále nevím, s čím chceš poradit. Ty jsi nepostupoval podle
dokumentace, něco jsi kopíroval mezi projekty a dohromady to nefunguje.
Samotný web-project
funguje.
Tady je těžké něco radit, když nevíme jaké máš zdrojáky.
- Mirek
- Člen | 86
Tak jsem udělal composer install a jediné co se změnilo je
"content-hash": "d232e84badbca2e6eb8fed88a7e85516"
v composer.lock a je tam stále
"autoload": {
"classmap": [
"src/"
]
},
i když v composer.json mám
"autoload": {
"psr-4": {
"App\\": "app"
}
},
a ve vendor\autoload.php, vendor\composer\autoload_real.php a vendor\composer\autoload_static.php je stále ten původní „content-hash“
A co mám za zdrojáky je jasné z mého prvního příspěvku, kde píšu, že jsem si stáhnul celé nette :
composer create-project nette/nette moje.aplikace
a pak, abych se podíval jak to funguje, jsem si stáhnul zip soubor s
„web-project“
zjistil jsem, že moje.aplikace má jen adresář Nette a vendor, tak jsem
z web-project nakopíroval adresáře app, config, log, temp a www včetně
index.php.
A snažím se zjistit, co vše je potřeba udělat, aby moje.aplikace začala
fungovat s tím staženým Nette.
Zatím jsme se dobrali k tomu, že je v composer.json potřeba změnit
autoload, ale nepodařilo se mi jeho nastavení dostat do composer.lock když
jsem udělal composer install
Editoval Mirek (24. 10. 2023 14:25)
- Ozzrel
- Generous Backer | 54
Ano neustále popisuješ špatný postup který jsi udělal.
Správný postup je popsaný v dokumentaci a překvapivě se to jmenuje Jak
vytvořit nový projekt
A opravdu to funguje tak to tobě bude taky fungovat.
composer create-project nette/web-project my-project
Magii za tebe udělá Composer a ty už budeš moc tvořit nové aplikace
- Mirek
- Člen | 86
Když já ale té magii chci přijít na kloub. Je jednoduché říct udělej
composer create-project nette/web-project my-project
a magii
udělá composer, ale pak narazím na to, že mi chybí nějaká komponenta a
zase narazím na problém, jak jí přidat. Já bych prostě chtěl porozumět
tomu, co dělá composer a co dělá nette. Já třeba uvažuji o možnosti
mít nainstalované jedno nette a použít ho pro víc aplikací a to bez toho,
abych porozumněl chování composeru a nette, nepůjde.
- Pavel Kravčík
- Člen | 1196
Jestli se tomu věnuješ 14 let a stále to nedává smysl, tak bych si nekladl (při vší úctě) příliš velké cíle. Lidi Ti tady radí dobře, ale ty neposloucháš.
Pokud se s tím chceš trápit, doporučil bych následující postup rozsekat na menší části a ty se snažit pochopit:
- Zkus si composer bez Nette (zbytečně si to děláš složité a je větší prostor pro chyby)
- Měj pouze index.php, kde bude je
__DIR__ . /composer/autoload.
, tam si dej třeba jen echo „hello world“ - Nastuduj classmap
- Nastuduj PSR-0 (až pochopíš tak PSR-4)
- Přidej si jen jednu třídu (kam třeba přesuneš to echo)
- Přegeneruj si autoload
- Mrkni co se stalo a jestli tam tu třídu máš, jak se změnil soubor ve
vendor/composer/autoload_classmap.php
apod. a pak postupně nabaluj další věci
- Šaman
- Člen | 2667
Proto máš začít na
composer create-project nette/web-project moje-aplikace
Btw. u mě to funguje i to nette/nette
, překopírované
chybějící adresáře z nette/web-project
, upravený autoload v
composer.json
, náledně composer install
. A aplikace
naběhne. Ale počítej s tím, že composer nemá doporučenou strukturu a
máš tam navíc adresář Nette. Protože nette/nette
není
projekt. Je to repozitář, který funguje jako zkratka zastřešující všechny
tyhle balíčky. A používá se skrze composer require
, nebo
se ručně zapíše jako závislost do composer.json
.
A jestli ti to nefunguje, tak děláš něco špatně. A já netuším co.
P.S. Ten composer install
by měl změnit soubor
vendor/composer/autoload_psr4.php
. Tam je ta výjimka mapování
\App -> /app
, jinak se používá PSR-4.
Edit: To výše jsem psal než se objevily poslední komentáře. Jestli tomu
chceš přijít na kloub, tak začni s composerem a jak funguje jeho
autoloading tříd. To nemá s Nette nic společného, jen že ho Nette
používá.
A zapomeň na repozitář nette/nette
. Používej jednotlivé
Nette balíčky, které tvoje aplikace potřebuje.
Editoval Šaman (24. 10. 2023 15:26)
- dakur
- Člen | 493
zjistil jsem, že moje.aplikace má jen adresář Nette a vendor, tak jsem z web-project nakopíroval adresáře app, config, log, temp a www včetně index.php.
Já bych to dělal naopak – z mého projektu bych kopíroval věci do web-project. Tím bude nette dál fungovat a svůj kód si do něj doregistruju.
Myslím že proto, abys rozjel svou appku v nette nepotřebuješ rozumět vnitřnostem nette a composeru. Pokud tě to zajímá, nejjednodušší asi bude proklikávat v IDE volání funkcí/metod od index.php, nebo si rovnou pustit debugger a krokovat. Obojí ale moc nesouvisí s provázáním tvého projektu s nette, přijde mi, že řešíš dvě velké nesouvisející věci zaráz.
- m.brecher
- Generous Backer | 873
@Mirek
Když já ale té magii chci přijít na kloub. Je jednoduché říct udělej composer create-project nette/web-project my-project a magii udělá composer, ale pak narazím na to, že mi chybí nějaká komponenta a zase narazím na problém, jak jí přidat. Já bych prostě chtěl porozumět tomu, co dělá composer a co dělá nette. Já třeba uvažuji o možnosti mít nainstalované jedno nette a použít ho pro víc aplikací a to bez toho, abych porozuměl chování composeru a nette, nepůjde.
To já bych chtěl také, ale zatím jsem to odložil na pozdější dobu. Protože je to poměrně vysoká laťka a de facto se to není kde naučit – jedinou cestou je to nějak zkoušet. Přínosnější postup je psát aplikace v Nette, které vycházejí z nette/web-project a proniknout do použití Nette/Latte pro tvorbu aplikací. Tam Ti to přinese výsledky ve formě hotových aplikací a naučíš se spoustu věcí. Můžeš samozřejmě zkusit pochopit Composer a strukturu Nette aplikací do hloubky, ale spálíš na tom spoustu času a ve výsledku Ti to nic moc nepřinese, protože z nette/web-project se dají nastartovat všechny možné myslitelné aplikace – cms, eshopy, rezervační systémy apod…
ale pak narazím na to, že mi chybí nějaká komponenta a zase narazím na problém, jak jí přidat
samozřejmě potřebuješ umět základy práce s composerem – jak nainstalovat nějakou komponentu, update projektu, výpis instalovaných balíčků, apod. Leccos sed dá nastudovat z dokumentace ke composeru, když narazíš na konkrétní problém, můžeš se zeptat na fóru a na dobře zformulovanou otázku obvykle dostaneš správnou odpověď.
- David Grudl
- Nette Core | 8239
Hele tam žádná magie není.
composer create-project nette/web-project my-project
Znamená:
- stáhni z githubu ZIP s projektem
nette/web-project
- rozbal ho do složky
my-project
- stáhni z githubu ZIPy se všemi projekty uvedenými v souboru
composer.json
, který je v tom rozbaleném archivu - rozbal je do složky
vendor
- vyrob autoloader – to se dá udělat třeba tak, že projde všechny PHP soubory ve složce vendor a zapíše si na disk seznam souborů a tříd v nich
Nic víc. Dá se to udělat i ručně, bez composeru, jen to bude trvat půl hodiny místo deseti sekund
Jediný problém byl, že jsi místo
composer create-project nette/web-project
napsal
composer create-project nette/nette
. Což asi bylo z nepozornosti
a samozřejmě to pak „nefungovalo“.