Article View: pl.comp.lang.php
Article #232043Re: Laravel - jak to to działa?
From: Marek S
Date: Sun, 02 Dec 2018 21:51
Date: Sun, 02 Dec 2018 21:51
70 lines
3324 bytes
3324 bytes
W dniu 2018-12-01 o 20:35, Borys Pogoreło pisze:
> Fasada to tylko inny sposób dostępu do kontenera IoC. Czyli np. pisząc
> DB::query() sięgasz do kontenera pod klucz zdefiniowany w pliku
> Illuminate/Support/Facades/DB.php:
To ja wiem. Sęk w tym, że w Laravelu fasady są w zasadzie puste. Coś je
uzupełnia po uruchomieniu frameworka. Tak jest w przypadku wspomnianego
Requesta. Fasada zawiera inicjalnie pustą tablicę, którą wypełnia nie
wiadomo co. Gdy wołamy get(), to wywołuje się de facto odwołanie do
wewnętrznej tablicy z polem "get", które z kolei zawiera wskaźnik do
jakiejś metody. Z pewnością nią nie jest Request::get bo ... Request nie
zawiera niczego takiego. Zresztą, który Request, bo znalazłem ich więcej
niż 1?
Szukam konkretnie listingu metody get/post. Wymiękłem analizując ścieżkę
do ścieżki zawierającą ścieżkę.
> Zaś do GET/POST najprościej się dostać przez instancję obiektu klasy
> Request automatycznie wstrzykiwaną przez podpowiadanie typów do metody
> kontrolera obsługującego bieżącą akcję, czyli po prostu:
>
> public function twojaAkcja(Request $request)
> {
> $zmiennaGet = $request->input('zmienna');
> // ...
> }
Zupełnie nie o to mi chodziło lecz o źródło w/w metody.
A skoro wspominasz o tym, to również nie bardzo ogarniam takie
wstrzykiwanie. W/g mnie wstrzykiwaniem nazywa się proces w postaci:
$obiekt1=new CośTam();
$obiekt2->metoda($obiekt1);
gdzie
class Obiekt2 {
...
//$_cosTam to coś, co wstrzykujemy
public function metoda(CośTam $_cosTam) {
}
}
Tymczasem odwrotne podejście w postaci
$obiekt2->metoda(Co $co, Nam $nam, Ślina $ślina, Na $na, Język $język,
Przyniesie $przyniesie);
jest dla mnie również kompletnie niezrozumiałe. Sądziłem, że jakakolwiek
metoda gdziekolwiek powinna spodziewać się ściśle konkretnych
argumentów. Tymczasem okazuje się, ze z jakiś niejasnych względów zadziała:
$obiekt->twojaAkcja(Request $request)
jak i
$obiekt->twojaAkcja(URL $url)
Czyli wynika z tego, że w jakiś magiczny sposób powyższy $request będzie
przekazywał wartość new Request mimo iż nigdzie nie używam operatora
new. Tak PHP nie działa. Operator new sam się nie doda a mimo wszystko
to działa. O co chodzi?
--
Pozdrawiam,
Marek
Technical Details
Message-ID:
<pu1k56$dd4$1@node2.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<ptsctv$cfj$1@node1.news.atman.pl> <1v0xvyvpzdfv7$.1rpu9f5pj0855.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Marek S <precz@spamowi.com> Newsgroups: pl.comp.lang.php Subject: Re: Laravel - jak to to działa? Date: Sun, 2 Dec 2018 22:51:27 +0100 Organization: ATMAN - ATM S.A. Lines: 70 Message-ID: <pu1k56$dd4$1@node2.news.atman.pl> References: <ptsctv$cfj$1@node1.news.atman.pl> <1v0xvyvpzdfv7$.1rpu9f5pj0855.dlg@40tude.net> NNTP-Posting-Host: 89-70-94-204.dynamic.chello.pl Mime-Version: 1.0 X-Trace: node2.news.atman.pl 1543787494 13732 89.70.94.204 (2 Dec 2018 21:51:34 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Sun, 2 Dec 2018 21:51:34 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.3.2 In-Reply-To: <1v0xvyvpzdfv7$.1rpu9f5pj0855.dlg@40tude.net> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit