Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More accurate specification of the current presenter and view #1016

Closed
wants to merge 46 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ad29ee0
di: added Global State and Singletons
dg Mar 1, 2023
33a5e79
typo
dg Mar 13, 2023
d6d2555
```bash -> shell
dg Mar 14, 2023
44cd690
composer: improved content
dg Mar 14, 2023
38c3fa9
contributing/documentation: improved
dg Mar 20, 2023
2af8489
contributing/code: rewritten
dg Apr 8, 2023
bd86fe9
presenter Homepage -> Home
dg Mar 14, 2023
be57009
added new page 'installation'
dg Mar 15, 2023
bf945e6
home restruct
dg Mar 16, 2023
338d8c5
home: added sponsor
dg Apr 8, 2023
24ba949
quickstart: reference to installation
dg Mar 16, 2023
0b82ebb
added best-practices:lets-create-contact-form (removed pla)
dg Mar 7, 2023
925fb1a
packages: removed installation info
dg Mar 17, 2023
00a4f67
typo in Latte (#970)
janvalentik Mar 20, 2023
e6ede1d
di/passing-dependencies: better class & variables naming
dg Mar 21, 2023
4dfe968
di/passing-dependencies: highlighting inject info
dg Mar 21, 2023
73b3c27
di/passing-dependencies: added constructor hell
dg Mar 21, 2023
ef53cef
di: added FAQ
dg Mar 1, 2023
3d3fb3e
typo (#972)
berbeflo Mar 23, 2023
ca516be
Typo (#973)
johny-patera Mar 25, 2023
c54b483
php-generator: fixes
dg Mar 23, 2023
54fc2ec
persistent parameters: improved info
dg Mar 27, 2023
5cd2752
form reuse: improved
dg Mar 27, 2023
2106763
retranslated by GPT-4 (only EN version)
dg Mar 28, 2023
71729a1
inject injection: improved
dg Mar 29, 2023
89b7224
latte: added perex to cookbook
dg Apr 4, 2023
2f21671
tracy: improved
dg Apr 5, 2023
ea62e48
tracy: Adding a line to the Tracy activation code sample (#991)
mildabre Apr 7, 2023
6f4dee1
form: improvements (#995)(#996)(#997)(#998)
mildabre Apr 7, 2023
3decfab
application: improvements (#990)(#993)(#999)(#1002)
mildabre Apr 7, 2023
9861824
wording (#1000) (#1001)
mildabre Apr 7, 2023
9953432
latte: added {formContainer}
dg Apr 9, 2023
156353a
typo (#1004)
mildabre Apr 11, 2023
f0ba9e0
troubleshooting: testing .htaccess / mod_rewrite
dg Apr 14, 2023
ae6153c
10-reasons-why-nette: rewritten
dg Apr 16, 2023
7e781cb
latte: added "why use"
dg Apr 18, 2023
34c63d3
Typo (#1008)
diegosardina Apr 24, 2023
e89fbb2
Typos. (#1010)
radekdostal Apr 26, 2023
b17c6e8
application: improved leftmenu
dg May 14, 2023
3909369
typo (cs) (#1013)
Dzardys May 17, 2023
3302b2e
added: AVIF support (#1011)
jhabaj May 22, 2023
4be96ac
php-generator: better info about PSR
dg May 22, 2023
b64b740
coding-standard: added image of signature/body separation
dg May 22, 2023
60bf5cd
migration guide for Nette 4.0 [WIP]
dg Feb 10, 2023
0956ea5
assistant wip
dg Apr 19, 2023
b4f8883
More accurate specification of the current presenter and view
mildabre May 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
application: improvements (#990)(#993)(#999)(#1002)
  • Loading branch information
mildabre authored and dg committed May 29, 2023
commit 3decfab9f932803bba7d53c9239942203b3818f9
23 changes: 21 additions & 2 deletions application/bg/ajax.texy
Original file line number Diff line number Diff line change
@@ -10,9 +10,13 @@ AJAX и фрагменти

</div>

Заявката AJAX може да бъде открита чрез метода на услугата, който [капсулира HTTP заявката |http:request] `$httpRequest->isAjax()` (определя се въз основа на HTTP заглавието `X-Requested-With`). Съществува и съкратен метод в програмата за представяне: `$this->isAjax()`.

Заявката AJAX не се различава от обикновената заявка - водещият се извиква с определено представяне и параметри. От водещия зависи и как ще реагира: той може да използва процедурите си, за да върне фрагмент от HTML код, XML документ, JSON обект или част от Javascript код.
Заявка AJAX .[#toc-ajax-request]
================================

Заявката AJAX не се различава от класическата заявка - водещият се извиква с определен изглед и параметри. От водещия също зависи как да отговори на нея: той може да използва своя собствена процедура, която връща фрагмент от HTML код (HTML snippet), XML документ, JSON обект или JavaScript код.

От страна на сървъра AJAX заявката може да бъде открита с помощта на метода на услугата, [капсулиращ HTTP заявката |http:request] `$httpRequest->isAjax()` (открива се въз основа на HTTP заглавието `X-Requested-With`). Вътре в презентатора е наличен пряк път под формата на метода `$this->isAjax()`.

Съществува предварително обработен обект `payload`, предназначен за изпращане на данни към браузъра във формат JSON.

@@ -60,6 +64,21 @@ npm install naja
<script src="https://unpkg.com/naja@2/dist/Naja.min.js"></script>
```

За да създадете AJAX заявка от обикновена връзка (сигнал) или подаване на формуляр, просто маркирайте съответната връзка, формуляр или бутон с класа `ajax`:

```html
<a n:href="go!" class="ajax">Go</a>

<form n:name="form" class="ajax">
<input n:name="submit">
</form>

or
<form n:name="form">
<input n:name="submit" class="ajax">
</form>
```


Извадки .[#toc-snippety]
========================
15 changes: 14 additions & 1 deletion application/bg/bootstrap.texy
Original file line number Diff line number Diff line change
@@ -174,7 +174,7 @@ $configurator->addStaticParameters([
]);
```

Конфигурационните файлове могат да използват нормалния запис `%projectId%` за достъп до параметъра с име `projectId`. По подразбиране конфигураторът попълва следните параметри: `appDir`, `wwwDir`, `tempDir`, `vendorDir`, `debugMode` и `consoleMode`.
В конфигурационните файлове можем да запишем обичайната нотация `%projectId%`, за да получим достъп до параметъра с име `projectId`.


Динамични параметри .[#toc-dynamic-parameters]
@@ -197,6 +197,19 @@ $configurator->addDynamicParameters([
```


Параметри по подразбиране .[#toc-default-parameters]
----------------------------------------------------

Можете да използвате следните статични параметри в конфигурационните файлове:

- `%appDir%` е абсолютният път до директорията на файла `Bootstrap.php`
- `%wwwDir%` е абсолютният път до директорията, съдържаща входния файл `index.php`
- `%tempDir%` е абсолютният път до директорията за временни файлове
- `%vendorDir%` е абсолютният път до директорията, в която Composer инсталира библиотеки
- `%debugMode%` показва дали приложението е в режим на отстраняване на грешки
- `%consoleMode%` показва дали заявката е постъпила от командния ред


Внесени услуги .[#toc-imported-services]
----------------------------------------

4 changes: 2 additions & 2 deletions application/bg/presenters.texy
Original file line number Diff line number Diff line change
@@ -158,7 +158,7 @@ $url = $this->link('Product:show', [$id, 'lang' => 'en']);
$this->forward('Product:show');
```

Пример за временно пренасочване с HTTP код 302 или 303:
Пример за т.нар. временно пренасочване с HTTP код 302 (или 303, ако текущият метод на заявка е POST):

```php
$this->redirect('Product:show', $id);
@@ -170,7 +170,7 @@ $this->redirect('Product:show', $id);
$this->redirectPermanent('Product:show', $id);
```

Можете да пренасочите към друг URL адрес извън приложението, като използвате метода `redirectUrl()`:
Можете да пренасочите към друг URL адрес извън приложението, като използвате метода `redirectUrl()`. Като втори параметър може да се посочи HTTP кодът, като по подразбиране той е 302 (или 303, ако текущият метод на заявка е POST):

```php
$this->redirectUrl('https://nette.org');
4 changes: 3 additions & 1 deletion application/bg/templates.texy
Original file line number Diff line number Diff line change
@@ -42,7 +42,9 @@ Nette използва системата за шаблони [Latte |latte:]. L
- `templates/<Presenter>/<view>.latte`
- `templates/<Presenter>.<view>.latte`

Ако шаблонът не е намерен, отговорът ще бъде [грешка 404 |presenters#error-404-etc].
Ако шаблонът не бъде намерен, ще се опита да търси в директорията `templates` едно ниво по-нагоре, т.е. на същото ниво като директорията с класа на водещия.

Ако шаблонът не бъде намерен и там, отговорът ще бъде [грешка 404 |presenters#Error 404 etc.].

Можете също така да промените изгледа с помощта на `$this->setView('jineView')`. Или вместо да търсите директно, посочете името на файла с шаблона, като използвате `$this->template->setFile('/path/to/template.latte')`.

21 changes: 20 additions & 1 deletion application/cs/ajax.texy
Original file line number Diff line number Diff line change
@@ -10,10 +10,14 @@ Moderní webové aplikace dnes běží napůl na serveru, napůl v prohlížeči

</div>

AJAXový požadavek lze detekovat metodou služby [zapouzdřující HTTP požadavek |http:request] `$httpRequest->isAjax()` (detekuje podle HTTP hlavičky `X-Requested-With`). Uvnitř presenteru je k dispozici "zkratka" v podobě metody `$this->isAjax()`.

AJAXový požadavek
=================

AJAXový požadavek se nijak neliší od klasického požadavku - je zavolán presenter s určitým view a parametry. Je také věcí presenteru, jak bude na něj reagovat: může použít vlastní rutinu, která vrátí nějaký fragment HTML kódu (HTML snippet), XML dokument, JSON objekt nebo kód v JavaScriptu.

Na straně serveru lze AJAXový požadavek detekovat metodou služby [zapouzdřující HTTP požadavek |http:request] `$httpRequest->isAjax()` (detekuje podle HTTP hlavičky `X-Requested-With`). Uvnitř presenteru je k dispozici "zkratka" v podobě metody `$this->isAjax()`.

Pro odesílání dat prohlížeči ve formátu JSON lze využít předpřipravený objekt `payload`:

```php
@@ -60,6 +64,21 @@ npm install naja
<script src="https://unpkg.com/naja@2/dist/Naja.min.js"></script>
```

Aby se z obyčejného odkazu (signálu) nebo odeslání formuláře vytvořil AJAXový požadavek, stačí označit příslušný odkaz, formulář nebo tlačítko třídou `ajax`:

```html
<a n:href="go!" class="ajax">Go</a>

<form n:name="form" class="ajax">
<input n:name="submit">
</form>

nebo
<form n:name="form">
<input n:name="submit" class="ajax">
</form>
```


Snippety
========
15 changes: 14 additions & 1 deletion application/cs/bootstrap.texy
Original file line number Diff line number Diff line change
@@ -174,7 +174,7 @@ $configurator->addStaticParameters([
]);
```

Na parametr `projectId` se lze v konfiguraci odkázat obvyklým zápisem `%projectId%`. Třída Configurator automaticky přidává parametry `appDir`, `wwwDir`, `tempDir`, `vendorDir`, `debugMode` a `consoleMode`.
Na parametr `projectId` se lze v konfiguraci odkázat obvyklým zápisem `%projectId%`.


Dynamické parametry
@@ -197,6 +197,19 @@ $configurator->addDynamicParameters([
```


Výchozí parametry
-----------------

V konfiguračních souborech můžete využít tyto statické parametry:

- `%appDir%` je absolutní cesta k adresáři se souborem `Bootstrap.php`
- `%wwwDir%` je absolutní cesta k adresáři se vstupním souborem `index.php`
- `%tempDir%` je absolutní cesta k adresáři pro dočasné soubory
- `%vendorDir%` je absolutní cesta k adresáři, kam Composer instaluje knihovny
- `%debugMode%` udává, zda je aplikace v debugovacím režimu
- `%consoleMode%` udává, zda request přišel přes příkazovou řádku


Importované služby
------------------

4 changes: 2 additions & 2 deletions application/cs/presenters.texy
Original file line number Diff line number Diff line change
@@ -158,7 +158,7 @@ Metoda `forward()` přejde na nový presenter okamžitě bez HTTP přesměrován
$this->forward('Product:show');
```

Příklad tzv. dočasného přesměrování s HTTP kódem 302 nebo 303:
Příklad tzv. dočasného přesměrování s HTTP kódem 302 (nebo 303, je-li metoda aktuálního požadavku POST):

```php
$this->redirect('Product:show', $id);
@@ -170,7 +170,7 @@ Permanentní přesměrování s HTTP kódem 301 docílíte takto:
$this->redirectPermanent('Product:show', $id);
```

Na jinou URL mimo aplikaci lze přesměrovat metodou `redirectUrl()`:
Na jinou URL mimo aplikaci lze přesměrovat metodou `redirectUrl()`. Jako druhý parametr lze uvést HTTP kód, výchozí je 302 (nebo 303, je-li metoda aktuálního požadavku POST):

```php
$this->redirectUrl('https://nette.org');
4 changes: 3 additions & 1 deletion application/cs/templates.texy
Original file line number Diff line number Diff line change
@@ -42,7 +42,9 @@ Cestu k šablonám odvodí presenter podle jednoduché logiky. Zkusí, zda exist
- `templates/<Presenter>/<view>.latte`
- `templates/<Presenter>.<view>.latte`

Pokud šablonu nenajde, je odpovědí [chyba 404|presenters#Chyba 404 a spol.].
Pokud šablonu nenajde, zkusí hledat ještě v adresáři `templates` o úroveň výš, tj. na stejné úrovni, jako je adresář s třídou presenteru.

Pokud ani tam šablonu nenajde, je odpovědí [chyba 404|presenters#Chyba 404 a spol.].

Můžete také změnit view pomocí `$this->setView('jineView')`. Nebo místo dohledávání přímo určit jméno souboru se šablonou pomocí `$this->template->setFile('/path/to/template.latte')`.

23 changes: 21 additions & 2 deletions application/de/ajax.texy
Original file line number Diff line number Diff line change
@@ -10,9 +10,13 @@ Moderne Webanwendungen laufen heute zur Hälfte auf einem Server und zur Hälfte

</div>

Eine AJAX-Anfrage kann mit einer Methode eines Dienstes, [der eine HTTP-Anfrage kapselt |http:request], erkannt werden `$httpRequest->isAjax()` (erkennt anhand des `X-Requested-With` HTTP-Headers). Es gibt auch eine Kurzform der Methode in Presenter: `$this->isAjax()`.

Eine AJAX-Anfrage unterscheidet sich nicht von einer normalen Anfrage - ein Presenter wird mit einer bestimmten Ansicht und Parametern aufgerufen. Auch hier ist es dem Präsentator überlassen, wie er reagiert: Er kann seine Routinen nutzen, um entweder ein Fragment von HTML-Code (ein Snippet), ein XML-Dokument, ein JSON-Objekt oder ein Stück Javascript-Code zurückzugeben.
AJAX-Anfrage .[#toc-ajax-request]
=================================

Eine AJAX-Anfrage unterscheidet sich nicht von einer klassischen Anfrage - der Presenter wird mit einer bestimmten Ansicht und Parametern aufgerufen. Es liegt auch am Präsentator, wie er darauf reagiert: Er kann seine eigene Routine verwenden, die ein HTML-Codefragment (HTML-Snippet), ein XML-Dokument, ein JSON-Objekt oder JavaScript-Code zurückgibt.

Auf der Serverseite kann eine AJAX-Anfrage mit Hilfe der Servicemethode erkannt werden [, die die HTTP-Anfrage kapselt |http:request] `$httpRequest->isAjax()` (erkennt auf der Grundlage des HTTP-Headers `X-Requested-With`). Innerhalb des Presenters ist eine Abkürzung in Form der Methode `$this->isAjax()` verfügbar.

Es gibt ein vorverarbeitetes Objekt namens `payload`, das für das Senden von Daten in JSON an den Browser bestimmt ist.

@@ -60,6 +64,21 @@ npm install naja
<script src="https://unpkg.com/naja@2/dist/Naja.min.js"></script>
```

Um eine AJAX-Anfrage aus einem regulären Link (Signal) oder einer Formularübermittlung zu erzeugen, markieren Sie einfach den entsprechenden Link, das Formular oder die Schaltfläche mit der Klasse `ajax`:

```html
<a n:href="go!" class="ajax">Go</a>

<form n:name="form" class="ajax">
<input n:name="submit">
</form>

or
<form n:name="form">
<input n:name="submit" class="ajax">
</form>
```


Schnipsel .[#toc-snippets]
==========================
15 changes: 14 additions & 1 deletion application/de/bootstrap.texy
Original file line number Diff line number Diff line change
@@ -174,7 +174,7 @@ $configurator->addStaticParameters([
]);
```

In Konfigurationsdateien können wir die übliche Notation `%projectId%` verwenden, um auf den Parameter mit dem Namen `projectId` zuzugreifen. Standardmäßig füllt der Configurator die folgenden Parameter aus: `appDir`, `wwwDir`, `tempDir`, `vendorDir`, `debugMode` und `consoleMode`.
In Konfigurationsdateien können wir die übliche Notation `%projectId%` verwenden, um auf den Parameter `projectId` zuzugreifen.


Dynamische Parameter .[#toc-dynamic-parameters]
@@ -197,6 +197,19 @@ $configurator->addDynamicParameters([
```


Standard-Parameter .[#toc-default-parameters]
---------------------------------------------

Sie können die folgenden statischen Parameter in den Konfigurationsdateien verwenden:

- `%appDir%` ist der absolute Pfad zu dem Verzeichnis, in dem sich die Datei `Bootstrap.php` befindet
- `%wwwDir%` ist der absolute Pfad zu dem Verzeichnis, das die `index.php` Eintragsdatei enthält
- `%tempDir%` ist der absolute Pfad zu dem Verzeichnis für temporäre Dateien
- `%vendorDir%` ist der absolute Pfad zu dem Verzeichnis, in dem Composer die Bibliotheken installiert
- `%debugMode%` gibt an, ob sich die Anwendung im Debug-Modus befindet
- `%consoleMode%` zeigt an, ob die Anfrage über die Befehlszeile kam


Importierte Dienste .[#toc-imported-services]
---------------------------------------------

4 changes: 2 additions & 2 deletions application/de/presenters.texy
Original file line number Diff line number Diff line change
@@ -158,7 +158,7 @@ Die `forward()` schaltet ohne HTTP-Umleitung sofort auf den neuen Präsentator u
$this->forward('Product:show');
```

Beispiel einer temporären Umleitung mit HTTP-Code 302 oder 303:
Beispiel für eine so genannte temporäre Umleitung mit HTTP-Code 302 (oder 303, wenn die aktuelle Anfragemethode POST ist):

```php
$this->redirect('Product:show', $id);
@@ -170,7 +170,7 @@ Um eine dauerhafte Umleitung mit HTTP-Code 301 zu erreichen, verwenden Sie:
$this->redirectPermanent('Product:show', $id);
```

Sie können mit der Methode `redirectUrl()` zu einer anderen URL außerhalb der Anwendung umleiten:
Sie können mit der Methode `redirectUrl()` zu einer anderen URL außerhalb der Anwendung umleiten. Der HTTP-Code kann als zweiter Parameter angegeben werden, wobei der Standardwert 302 ist (oder 303, wenn die aktuelle Anforderungsmethode POST ist):

```php
$this->redirectUrl('https://nette.org');
4 changes: 3 additions & 1 deletion application/de/templates.texy
Original file line number Diff line number Diff line change
@@ -42,7 +42,9 @@ Der Pfad zu den Vorlagen wird nach einer einfachen Logik hergeleitet. Es wird ve
- `templates/<Presenter>/<view>.latte`
- `templates/<Presenter>.<view>.latte`

Wenn die Vorlage nicht gefunden wird, wird der [Fehler 404 |presenters#Error 404 etc.] ausgegeben.
Wird die Vorlage nicht gefunden, wird versucht, im Verzeichnis `templates` eine Ebene höher zu suchen, d. h. auf der gleichen Ebene wie das Verzeichnis mit der Presenter-Klasse.

Wenn die Vorlage auch dort nicht gefunden wird, ist die Antwort ein [404-Fehler |presenters#Error 404 etc.].

Sie können die Ansicht auch mit `$this->setView('otherView')` ändern. Oder geben Sie statt der Suche direkt den Namen der Vorlagendatei mit `$this->template->setFile('/path/to/template.latte')` an.

23 changes: 21 additions & 2 deletions application/el/ajax.texy
Original file line number Diff line number Diff line change
@@ -10,9 +10,13 @@ AJAX & Snippets

</div>

Μια αίτηση AJAX μπορεί να ανιχνευθεί με τη χρήση μιας μεθόδου μιας υπηρεσίας που [ενθυλακώνει μια αίτηση HTTP |http:request] `$httpRequest->isAjax()` (ανιχνεύει με βάση την επικεφαλίδα `X-Requested-With` HTTP). Υπάρχει επίσης μια σύντομη μέθοδος στο presenter: `$this->isAjax()`.

Μια αίτηση AJAX δεν διαφέρει από μια κανονική αίτηση - καλείται ένας παρουσιαστής με μια συγκεκριμένη προβολή και παραμέτρους. Εξαρτάται, επίσης, από τον παρουσιαστή πώς θα αντιδράσει: μπορεί να χρησιμοποιήσει τις ρουτίνες του για να επιστρέψει είτε ένα τμήμα κώδικα HTML (ένα απόσπασμα), ένα έγγραφο XML, ένα αντικείμενο JSON ή ένα κομμάτι κώδικα Javascript.
Αίτηση AJAX .[#toc-ajax-request]
================================

Ένα αίτημα AJAX δεν διαφέρει από ένα κλασικό αίτημα - ο παρουσιαστής καλείται με μια συγκεκριμένη προβολή και παραμέτρους. Εξαρτάται επίσης από τον παρουσιαστή πώς θα απαντήσει σε αυτό: μπορεί να χρησιμοποιήσει τη δική του ρουτίνα, η οποία επιστρέφει ένα τμήμα κώδικα HTML (απόσπασμα HTML), ένα έγγραφο XML, ένα αντικείμενο JSON ή κώδικα JavaScript.

Από την πλευρά του διακομιστή, ένα αίτημα AJAX μπορεί να ανιχνευθεί χρησιμοποιώντας τη μέθοδο service που [ενθυλακώνει το αίτημα HTTP |http:request] `$httpRequest->isAjax()` (ανιχνεύει με βάση την επικεφαλίδα HTTP `X-Requested-With`). Στο εσωτερικό του παρουσιαστή, είναι διαθέσιμη μια συντόμευση με τη μορφή της μεθόδου `$this->isAjax()`.

Υπάρχει ένα προεπεξεργασμένο αντικείμενο που ονομάζεται `payload` και είναι αφιερωμένο στην αποστολή δεδομένων στο πρόγραμμα περιήγησης σε JSON.

@@ -60,6 +64,21 @@ npm install naja
<script src="https://unpkg.com/naja@2/dist/Naja.min.js"></script>
```

Για να δημιουργήσετε μια αίτηση AJAX από έναν κανονικό σύνδεσμο (σήμα) ή μια υποβολή φόρμας, απλά επισημάνετε τον σχετικό σύνδεσμο, τη φόρμα ή το κουμπί με την κλάση `ajax`:

```html
<a n:href="go!" class="ajax">Go</a>

<form n:name="form" class="ajax">
<input n:name="submit">
</form>

or
<form n:name="form">
<input n:name="submit" class="ajax">
</form>
```


Snippets .[#toc-snippets]
=========================
Loading