Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inny][Laravel] namespace i użycie
Randallmaster
post
Post #1





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Cześć,

Może jest to moja nie wiedza odnośnie OOP, ale zależy mi też aby zrobić to poprawnie w Laraverze.

mam taki układ controllerów:

/controllers
---PagesController
---/Pages
-------DefaultController

plik DefaultController:

  1. <?php
  2.  
  3. namespace App\Http\Controllers\Pages;
  4.  
  5. use Illuminate\Http\Request;
  6.  
  7. use App\Http\Requests;
  8. use App\Http\Controllers\Controller;
  9. use App\Http\Controllers\PagesController;
  10.  
  11. /**
  12.  * Class DefaultController
  13.  * @package App\Http\Controllers\Pages
  14.  */
  15. class DefaultController extends PagesController
  16. {
  17. /**
  18.   * Create default edit view
  19.   * @return mixed
  20.   */
  21. public function createDefaultView() //
  22. {
  23. $viewPortlet = view('pages.edit');
  24. $settingsPortlet = [
  25. 'setRedricted' => '',
  26. 'setClass' => '',
  27. 'setTitle' => '',
  28. 'setTitleHelper' => '',
  29. 'setActionButtons' => '',
  30. ];
  31. return $this->createPortlet($settingsPortlet, $viewPortlet);
  32. }
  33. }


1. W jaki sposób w PagesController wywołać funkcję: createDefaultView?, wiem że jak dodam że jest to funkcja statyczna to mi zadziała: DefaultController::createDefaultView(), czy w przypadku Laravela powinno się robić to inaczej? Można jeszcze w inny sposób dostać się do tej funkcji nie używając static?

2. Jak funkcję createPortlet wywołać z Controllera głównego bo tam też ona się znajduje? //w controller.php jest jako public function createPortlet()

Z góry dziękuję za pomoc

/////////////
wszystko działa jeżeli funkcje pozamieniam na statyczne, ale czy to tak może być?

Ten post edytował Randallmaster 29.07.2015, 18:22:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


1. Nie wywołasz metody dziecka z rodzica.
Albo musisz tworzyć instancje 'DefaultController' albo przekazać go jako dependency injection

2. Skoro dziedziczy po PagesController to zapewne tamten dziedziczy po Controller, więc tak jak masz.

Nie za bardzo rozumiem i widzę co chcesz osiągnąć, bo struktura katalogowo plikowa jest kiepska
Go to the top of the page
+Quote Post
Randallmaster
post
Post #3





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Pyton_000 dzięki za odpowiedź.

Są jakieś standardy które mówią jak prowadzić strukturę plików? Może mógłbyś coś polecić.

Co chcę osiągnąć.

'pages/edit' będzie dzieliła się na 5 tabsów, i te 5 tabsów chciałem rozbić na 5 różnych klas po 1 do każdego z taba. no i jedna główna classa czyli PagesController. Jak powinno wyglądać katalogowanie plików w takim przypadku?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nie ma standardów. Układa się katalogi raczej w logiczne całości żeby miało ręce i nogi.

Co masz na myśli 5 tabsów? Panadol? Apap? Czy może te od Goździkowej biggrin.gif

Opisz co to ma robić, jakie są założenia to coś wymyślimy.
Go to the top of the page
+Quote Post
Randallmaster
post
Post #5





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Panadol i Apap nie smile.gif może coś mocniejszego smile.gif generalnie jak wpiszesz Tabs i wyświetlisz grafikę w Google to pokaże to co robięsmile.gif dokładnie "pages/edit" ma tabsy z 5 poziomami uprawnień czyli na jednej stronie bedzie 5 stron umiesCzonych w podstronach. Do każdej podstrony chce wykonać osobna klasę z controllerem
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Dobra ja już nie wnikam.

- createPortlet() wydziel do jakiejś innej klasy która będzie odpowiedzialna za tworzenie czegoś takiego z parametrów. Nie ma sensu pchanie wszystkiego do głównego kontrolera.
- DefaultController nie musi w tym momencie dziedziczyć już po PagesController, wystarczy po Controller
- Teraz w PagesController musisz odpalić sobie generowanie tych zakładek. Obiekty możesz przekazać jako parametry w konstruktorze klasy lub parametry metody:

  1. <?php
  2.  
  3. /**
  4. *
  5. */
  6. class PagesController extends Controller
  7. {
  8.  
  9. protected $controller1;
  10.  
  11. protected $controller2;
  12.  
  13. function __construct(Tabs1Controller $controller1, Tabs2Controller $controller2)
  14. {
  15.  
  16. $this->controller1 = $controller1;
  17. $this->controller2 = $controller2;
  18. }
  19.  
  20. // LUB
  21.  
  22. public function generateTabs(Tabs1Controller $controller1, Tabs2Controller $controller2)
  23. {
  24. $tab1 = $controller1->createDefaultView();
  25. }
  26. }


Oczywiście nie zapomnieć o namespace
Go to the top of the page
+Quote Post
Randallmaster
post
Post #7





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Popraw mnie jeżeli źle zrozumiałem i zrobiłem poniższy przykład

  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Http\Controllers\Controller;
  6. use App\Http\Controllers\Pages\DefaultController;
  7. use App\Http\Controllers\Pages\PermissionController
  8.  
  9. class PagesController extends Controller
  10. {
  11.  
  12. protected $default;
  13.  
  14. protected $permission;
  15.  
  16. function __construct(DefaultController $default, PermissionController $permission)
  17. {
  18.  
  19. $this->default = $default;
  20. $this->permission = $permission;
  21. }
  22.  
  23. // CZY
  24.  
  25. public function generateTabs()
  26. {
  27. $tab1 = DefaultController::createDefaultView();
  28. }
  29. }


Jeżeli zrobiłem to poprawnie, odpowiedz mi co jest wydajniejsze. Pierwszy przykład z tworzeniem instancji w konstruktorze czy funkcja statyczna + abstract class? Wydaje mi się że raczej funkcja statyczyna + (zmiana klasy na abstrakcyjną), ponieważ znajdować się tam będą funkcję podstawowe dla PagesController?

Ten post edytował Randallmaster 30.07.2015, 07:36:47
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Wiesz, ja bym całkowicie olał te "podklasy" i to co one robią zostawił w głównym kontrolerze, a logikę zamieścił w jakimś repozytorium (Repositories).

Albo zamiast "tabów" oddielne kontrolery które będą odpalane samodzielnie. I wtedy odpalasz sobie np. PermissionsController który dziedziczy po PagesController (a ten po Controller) i tam sobie dłubiesz. Rzeczy w spólne będziesz miał w PagesController a indywidualne w konkretnej klasie.
Go to the top of the page
+Quote Post
Randallmaster
post
Post #9





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Dzięki wielkie za pomoc, ostatnie pytanie orientacyjne smile.gif, Repozytorium tworzyć w strukturze APP, czy lepiej w Illuminate za pomocą provides Facade?

i tak na szybko:
po co tworzyć : protected $permission;
jak i tak odwołuję się $this->permission->createDefaultView();
/raczej jest to w tej sytuacji nie potrzebne?

Ten post edytował Randallmaster 30.07.2015, 08:33:37
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Żeby było ładnie. Pola się deklaruje (ułatwia to później czytanie)
Repozytorium ja trzymam w app/Repositories/
Go to the top of the page
+Quote Post
Randallmaster
post
Post #11





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Dzięki za pomoc smile.gif
Go to the top of the page
+Quote Post
nrm
post
Post #12





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

Ostrzeżenie: (0%)
-----


wstrzykiwanie kontrolerów do kontrolerów? To jakaś incepcja? wink.gif



--------------------
Go to the top of the page
+Quote Post
Randallmaster
post
Post #13





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


tak na 4 poziomie smile.gif jest już problem bo bączek nie chce upaść tongue.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 18:48