🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #232043

Re: Laravel - jak to to działa?

#232043
From: Marek S
Date: Sun, 02 Dec 2018 21:51
70 lines
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-mail
References: <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