Laravel request naar custom Class

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 495666

Topicstarter
Hoi Iedereen,

Even vraagje omtrent de Request Class van Laravel.

Ik wil eigenlijk alle Request data (input, file etc) doorsturen naar een custom class.

In plaats van afhandeling in de Controller wil ik dit in een Class doen. De controller zou dus een instance van de huidige request moeten forwarden naar een bepaalde class. Dat ik de data daar verder kan afhandelen op dezelfde wijze als in een controller.

Heeft iemand enig idee hoe dat ik dit kan realiseren?

Alvast bedankt voor het meedenken! :)

Gaat om Laravel 5.1

Acties:
  • 0 Henk 'm!

  • spaceninja
  • Registratie: Juni 2007
  • Laatst online: 18-06 18:25
Kun je iets meer uitleggen over wat je precies wilt bereiken?

Klinkt namelijk als een soort middleware variant. Heb je die optie al bekeken?

Daarnaast kun je ook een class injecten in je controller en de request doorsturen naar die class. Daar kun je hier meer informatie over vinden.

Acties:
  • 0 Henk 'm!

Anoniem: 495666

Topicstarter
Thanks voor je reactie.

Mijn doelstelling is om Ajax Requests af te handelen in een eigen Class. Vanaf het frontend komen er aardig wat Ajax requests die nu in een Controller afgehandeld moeten worden. Met als resultaat dat een controller helemaal volgepropt zit met code.

Die requests wil ik daarom bij voorkeur in een aparte class verwerken. Blijft de code beter leesbaar.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Anoniem: 495666 schreef op vrijdag 19 februari 2016 @ 18:28:
Met als resultaat dat een controller helemaal volgepropt zit met code.
:?
Nu ken ik Laravel niet maar ik neem aan dat je een, zeg, CustomerController hebt en een ProductController en een ShoppingcartController en een.... waarom dan niet ook een AjaxController? Of misschien wel een CustomerAjaxController en een ProductAjaxController o.i.d.
Anoniem: 495666 schreef op vrijdag 19 februari 2016 @ 18:28:

[...] Ajax Requests af te handelen in een eigen Class. [...] aardig wat [...] requests die nu in een Controller afgehandeld[...]. Met als resultaat dat een controller helemaal volgepropt zit met code.

Die requests wil ik daarom [...] in een aparte class verwerken.
Dit klinkt me echt héél erg in de oren alsof je überhaupt maar 1 controller hebt waar alles in gemikkerd is. Als dat zo is zou ik toch echt even teruggaan naar de tekentafel (en MVC les :P )

[ Voor 14% gewijzigd door RobIII op 19-02-2016 18:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 495666

Topicstarter
MVC ben ik inmiddels wel bekend mee, daar zit het probleem niet in.

Een AjaxController is nu ook wat ik heb. Maar als je daarin 25+ ajax requests moet gaan afvangen dan krijg je onvermijdelijk toch een onoverzichtelijke lap code. Vandaar het idee om deze requests onder te gaan brengen in een eigen Class.

Dat is een beetje de insteek van het idee :) Ik zie dan ook meerwaarde in een centrale plek waarin je al deze requests kunt vinden. (eventueel ook voor medeprogrammeurs).

[ Voor 15% gewijzigd door Anoniem: 495666 op 19-02-2016 19:02 . Reden: toevoeging aan verhaal ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Anoniem: 495666 schreef op vrijdag 19 februari 2016 @ 18:58:
Een AjaxController is nu ook wat ik heb. [...] onder te gaan brengen in een eigen Class.
Je spreekt jezelf hier tegen? Althans: ik neem aan dat 1 controller 1 class is :?
Zonder meteen ettelijke honderden regels code te gaan posten: kun je je probleem eens illustreren in, pakweg, max. 50 ~ 100 regels (pseudo) code?

[ Voor 21% gewijzigd door RobIII op 19-02-2016 19:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 495666

Topicstarter
Ik heb hier even een schematische weergave gemaakt:

https://www.mupload.nl/img/xemwfabyhvn.png

Mocht dat nog niet werken dan maak ik wat regels pseudo code :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Anoniem: 495666 schreef op vrijdag 19 februari 2016 @ 19:18:
Ik heb hier even een schematische weergave gemaakt:

https://www.mupload.nl/img/xemwfabyhvn.png

Mocht dat nog niet werken dan maak ik wat regels pseudo code :)
Ik zie daar geen classes maar een flow :? En is dat de huidige situatie of de situatie zoals je 't zou willen hebben? Zou je iets meer moeite willen steken in je posts en wat vrijgeviger willen zijn met de informatie die je ons geeft? We moeten 't nu wel héél erg uit je trekken...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 495666

Topicstarter
Volgende poging.

Ik stuur meestal vanuit het Frontend een sleutel (veld / $_POST) mee naar de controller om te identificeren welke code ik moet uitvoeren. Ik heb nu twee stukken code, 1 huidig, 1 gewenste code. Alleen in de gewenste code heb ik een Instance nodig van de Laravel Request class omdat ik anders bijvoorbeeld een fileupload niet op de gebruikelijke manier kan verwerken.

Hopelijk heb ik het nu duidelijker uitgelegd.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php


class AjaxController extends Controller
{
    
    
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        
        $data = $request->all();
        
        // contains a post or get value from front-end ( $_POST['action'] )
        switch($data['action']){
            
            case 'upload':
                
                $file->move('tmp/path/','filename');
            
            break;
            
            case 'changeproduct':
                
                $prod = new Product()
                $product->find(1)->update('price',19.95);
            
            break;
            
            case 'tweakers':
            
                $sign = Signin('https://secure.tweakers.net/my.tnet/login/?location=http%3A%2F%2Ftweakers.net%2Ftag%2FInloggen%2Fforum%2F');
                
                if($sign){
                    // readdata 
                }
            break;
            
                
        }
        
        
    }
    
}


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php


class AjaxController extends Controller
{
    
    
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        
        $data = $request->all();
        
        // contains a post or get value from front-end ( $_POST['action'] )
        switch($data['action']){
            
            case 'upload':
                
                call_user_func_array('App\Classes\Ajax\Fileupload', array($data));
            
            break;
            
            case 'changeproduct':
                
                call_user_func_array('App\Classes\Ajax\ChangeProduct', array($data));
            
            break;
    
            
            case 'tweakers':
            
                call_user_func_array('App\Classes\Ajax\HandleSigninTweakers', array($data));
                
            break;
            
                
        }
        
        
    }
    
}


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

// oude situatie

namespace App\Classes\Ajax;

class ChangeProduct{

    public function handle(){
        // ontvangt platte array van call_user_func_array() 
    }

}

//gewenste situatie

namespace App\Classes\Ajax;

class ChangeProduct{

    public function handle(Request $request){
        $file = $request->file('myfile');
        $file->move();
    }

}

[ Voor 8% gewijzigd door Anoniem: 495666 op 19-02-2016 20:41 . Reden: aanvulling ]


Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 18:02
En waarom maak je niet gewoon verschillende targets aan voor je AJAX-calls? Je kunt toch prima je fileUploadAjaxCall laten sturen naar de AjaxFileUploadController terwijl je ChangeProduct weer onder een AjaxProductController hangt?

Je gebruikt nu een switch en een hele lelijke manier van classes aanroepen, terwijl je het veel netter zou kunnen oplossen door niet alle AJAX-calls af te laten handelen in een controller maar verder op te splitsen naar meerdere controllers.

Acties:
  • 0 Henk 'm!

  • tommieonos
  • Registratie: Oktober 2011
  • Laatst online: 00:20
Dit is iets wat je heel prima met routing op kan lossen.
Zo heb je in feite het zelfde gedrag als die switch case, maar dan op een overzichtelijke manier.

Acties:
  • 0 Henk 'm!

Anoniem: 495666

Topicstarter
Duidelijke antwoorden. Oplossen via de routing dus.

Ga ik daar verder mee aan de slag. Thanks!
Pagina: 1