Jak vytvořit novou aplikaci

Mirek
Člen | 86
+
0
-

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
+
0
-

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 | 2635
+
+1
-

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
+
0
-

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 | 2635
+
+1
-

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.

Mirek
Člen | 86
+
0
-

No vidíš, to asi bude ono, a to mě zajímá, abych pochopil, jak to celé funguje, tohle vyzkouším

Mirek
Člen | 86
+
0
-

Tak jsem v composer.json nahradil sekci autoload tímto:

	"autoload": {
		"psr-4": {
			"App\\": "app"
		}
	},

a stále mám stejnou chybu na řádku 7 v index.php

PHP Fatal error:  Uncaught Error: Class "App\Bootstrap" not found

Editoval Mirek (24. 10. 2023 11:45)

Šaman
Člen | 2635
+
+3
-

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
+
0
-

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 | 51
+
+1
-

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
+
-1
-

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 | 1182
+
+5
-

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 | 2635
+
+3
-

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
+
+1
-

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 | 761
+
0
-

@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 | 8147
+
+9
-

Hele tam žádná magie není.

composer create-project nette/web-project my-project

Znamená:

  1. stáhni z githubu ZIP s projektem nette/web-project
  2. rozbal ho do složky my-project
  3. stáhni z githubu ZIPy se všemi projekty uvedenými v souboru composer.json, který je v tom rozbaleném archivu
  4. rozbal je do složky vendor
  5. 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“.