Cóż, nie myślałem o tym zupełnie, DI raczej mi się kojarzy z wstrzykiwaniem potrzebnych klas do działania konkretnego fragmentu kodu np. w kontrolerze ładujemy repozytorium.
Nie myślałem o tym activeAccess jako o takie klasie, która jest jakim takim "state" aplikacji (czyli inaczej zmienną sesyjną).
Ale z ciekawości spróbuje.
No nie powiem, chyba to działa. Bałem się, że w takiej wstrzykniętej klasie nie będę miał dostępu do tego czego potrzebuje (sesji, zalogowanego użytkownika itp.) ale nie ma z tym problemu.
Plusem jest, że rozdzieliłem troszkę logikę ustalania tego aktywnego dostępu (bo to się opiera o kilka rzeczy - sesje, ciacho, db + jakaś wstępna autoryzacja) do tej osobnej klasy.
Ostatecznie to wygląda tak:
To sobie zostawiłem w moim bazowym kontrolerze aby zachować kompatybilność z obecnym kodem:
<!--Geshi:480696:php--><pre class="php-brief" style="font-family:monospace;"><div class="head">
[topic=0]ype</span><span class="sy0">;</span></div><li class="li1"><div class="de1"> <span class="br0">}</span></div><li class="li2"><div class="de2"> </div><li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div><li class="li2"><div class="de2"><span class="coMULTI"> * @return int</span></div><li class="li1"><div class="de1"><span class="coMULTI"> */</span></div><li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw2">function</span> getResourceId<span class="br0">(</span><span class="br0">)</span></div><li class="li1"><div class="de1"> <span class="br0">{</span></div><li class="li2"><div class="de2"> <span class="kw1">return</span> <span class="co1">// tu id w zależności od typu zasobu;</span></div><li class="li1"><div class="de1"> <span class="br0">}</span></div><li class="li2"><div class="de2"> </div><li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div><li class="li2"><div class="de2"><span class="coMULTI"> * @return string</span></div><li class="li1"><div class="de1"><span class="coMULTI"> */</span></div><li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw2">function</span> getAccessId<span class="br0">(</span><span class="br0">)</span></div><li class="li1"><div class="de1"> <span class="br0">{</span></div><li class="li2"><div class="de2"> <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-></span><span class="me1">accessObject</span><span class="sy0">-></span><span class="me1">access_id</span><span class="sy0">;</span></div><li class="li1"><div class="de1"> <span class="br0">}</span></div><li class="li2"><div class="de2"> </div><li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div><li class="li2"><div class="de2"><span class="coMULTI"> * @return string</span></div><li class="li1"><div class="de1"><span class="coMULTI"> */</span></div><li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw2">function</span> getAccessCode<span class="br0">(</span><span class="br0">)</span></div><li class="li1"><div class="de1"> <span class="br0">{</span></div><li class="li2"><div class="de2"> <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-></span><span class="me1">accessObject</span><span class="sy0">-></span><span class="me1">access_code</span><span class="sy0">;</span></div><li class="li1"><div class="de1"> <span class="br0">}</span></div><li class="li2"><div class="de2"> </div><li class="li1"><div class="de1"><span class="br0">}</span></div>
[/list]<div class="foot">[PHP] [url="./Pobierz-Plik-480697.html"]plaintext[/url] </div></pre><!--/Geshi:480697:php-->
no i magiczne DI
[php] /**
* Get the validation rules that apply to the request.
*
* @param ActiveAccess $activeAccess
* @return array
*/
public function rules(ActiveAccess $activeAccess)
{
$activeAccess->getResourceId();
// i można użyć bieżącego ID
}
Minus jak widzę to póki co podwójny narzut na to samo - tzn. wykonanie zapytań które są w ActiveAccess. Nie wiem czy Singleton by mógł tu pomóc

Z Singletonem w LR jakoś nie idzie:
$this->app->singleton('Session\ActiveAccess', function ($app) {
return new ActiveAccess();
});
Kod się generalnie nie wykonuje gdy wstrzykuję klasę ActiveAccess :/
edit: Masakra z tym forum, rozpierdzieliło cały kod... Nie mam ochoty tego 3 raz już poprawiać..