Eno vprašanje glede Laravel 5

Recimo ustvarim en model in ga kličem/inicializiram v controllerju tako, da mu zapišem atribute. Ti se jasno prenesejo v _construct od Eloquent modela (ne mojega modela ampak onega privzetega extendanega, ker v mojem modelu nimam _construct()), ki pa naredi kaj? Vse te vrednosti zapiše v polje $attributes, ne?

Recimo sedaj pa v controllerju preko modela ustvarim še neke nove lastnosti (preko setters) in Laravel v ozadju spet samodejno vse te lastnosti vrže v lastnost/polje $attributes (doda jih že obstoječim), ne?

Ko poženem metodo save() pa se izvede query točno na podlagi vrednosti iz $attributes, ne?

Upam, da sem bil dovolj jasen, drugače lahko dam kak primer, da bo bolj razumljivo ampak je kar nekaj kode, pa se mi ni dalo v prvo vse kopirati :P

17 odgovorov

  1. sprašuješ kaj laravel dela v ozadju ali v čem točno je problem? (ti kaj ne dela, ali vse dela pa te samo zanima če mora tko delat?)
  2. prilepi kodo (ne tukaj ampak na nek paste recimo: http://laravel.io/bin)
1

Vse dela tako kot mora, samo zanima me zakaj dela ;)

Koda je iz tega vodiča https://laracasts.com/series/build-your-first-app-in-laravel/episodes/9

V bazo želimo zapisati združene podaatke iz session + podatke iz request.

Imamo model Notice in NoticesController.

NoticesController.php

public function store(Request $request) {

        $this->createNotice($request);

        return redirect('notices');
    }

private function createNotice(Request $request) {
        $data = session()->get('dmca');

        $notice = Notice::open($data)->useTemplate($request->input('template'));

        return $notice;
        \Auth::user()->notices()->save($notice);
    }

Notice model

public static function open(array $attributes) {
        return new static($attributes);
    }

public function useTemplate($template) {
        $this->template = $template;

        return $this;
    }

Zanima me tale koda...

$notice = Notice::open($data)->useTemplate($request->input('template'));

Torej najprej inicializiramo Notice objekt, mu damo argument $data (podatki se pošljejo v _construct in tu se vsebina zapiše v Laravel $attributes polje?), potem poženemo ustvarjeno useTemplate() metodo, katere podatke zapišemo v $this->template = $template; torej lastnost $template. V ozadju pa tudi te podatke Laravel priključi polju $attributes? Verjetno preko setters, ker jasno $template nimamo definirano zato se zažene magic method _set(), ki te podatke (verjetno) zapiše v $attributes? Na koncu pa lepo celotno polje $attributes Laravel uporabi za formacijo query (save()). Si prav predstavljm ali je kje napaka? V vodiču Jeffrey ni šel ravno v preveč detajle.

Seveda je zgornja koda po moje brezveze zakomplicirana, ker bi se dalo vse skupaj enostavno zapisati kot

$notice = session()->get('dmca') + ['template' => $request->input('template')];

kar je tudi prikazano v naslendjem vodiču.

Pa ker mam občutek, da obvladaš, bi te še nekaj vprašal :)

Zgoraj kjer smo z open() inicializirali objekt, torej bi lahko zapisali na primer tudi

$notice = new Notice->useTemplate($request->input('template')); ali tole ne bi šlo in bi morali zapisati

$notice = new Notice;
$notice->useTemplate($request->input('template'));

(saj vem, da bi lahko tudi sam preveri ampak vseeno vprašam)

No saj si kar natančno opisal kaj dela :)
Ker vidim da gledaš laracast. Stran je res odlična....toda.....pazi malo koliko v globino njegovih zadev greš. Da ne boš potem nekaj uporabljal samo zato ker je Way tako rekel.

Recimo tole poimenovanje konstruktorja jaz ne bi šel delat. Ne vidim pointa (in kot Way omeni, je to samo neko logično poimenovanje konstruktorja.....kaj za hudiča pa konstruktorju fali). Lahko bi dal tako kot si rekel:

$notice = (new Notice())->useTemplate($request->input('template'));

Če rabiš gledat kako gre v droboje imaš prov zato serijo "Advanced Eloquent". Sam jo še nisem pogledal in ne vem koliko razloži.

2

Se mi je zdelo, da je nekaj takšnega. Hvala za potrditev ;) Se še učim Laravel in OOP pa se še malo lovim.

Tudi meni se zid, da je tole z open() nepotrebno, se pa vsaj naučiš nekaj novega. Advanced Eloquent pride pa še na vrsto :)

ja Jeffery rad kje malo pretirava. Oz....pač ti pokaže opcijo kako se to lahko naredi, ne pravi pa, da moraš ti tako naredit.

Če greš poslušat podcaste Taylor lepo prizna, da njegovi projekti tako rekoč nimajo repozitorijev. Ker jih pač ne rab, pa tudi če vsi samo še o tem govorijo.

Če bo pa še kaj, pa kar vpraš.

1

Imam še eno težavo. Sicer ni neposredno povezava z Laravel ampak verjetno prej z administracijo strežnika.

Ko želim poslati kakšen email preko Mandrill (guzzlehttp/guzzle:~5.0 seveda nameščen), se mi izpiše spodnja napaka

Odpraviti sem jo poskusil s temle navodil ampak žal brez uspeha (zapis sem dodal v php.ini od apache - ne od php)

http://stackoverflow.com/questions/21114371/php-curl-error-code-60

Uporabljam Win 7, WAMP 2.4.

curl nastavitve, če komu kaj pomaga

Ve kdo v čem je problem? Saj vem, da bi na strežniku verjetno vse delovalo ampak bi rad uredil tako, da mi bo tudi na localhost.

Pa imaš ta certifikat in pravilno pot do njega zapisano?

To ma Wamp težavo.
SI downloadal root cert dol ali samo odkomentiral vrstico?

SlimDeluxe:
Pa imaš ta certifikat in pravilno pot do njega zapisano?

Imam

OvcaX:
To ma Wamp težavo.
SI downloadal root cert dol ali samo odkomentiral vrstico?

Vrstice v php.ini nisem odkomentiral, ker je ni ampak sem jo dodal na koncu datoteke.