[PHP CMS] Sessie gebruiken of variabele steeds doorgeven?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 426269

Topicstarter
In mijn CMS'je (in PHP) kunnen verschillende users o.a. elk meerdere projecten bijhouden.

Om te kijken of iemand ingelogd is, gebruikt ik een sessie. Die sessievariabele kan ik makkelijk elke keer meegeven aan een project of afbeelding van die user, zodat die wordt opgeslagen in de database en je weet welk project of afbeelding er bij welke user hoort.

Users kunnen meerdere projecten hebben. Als een user een bepaald project toevoegt, of aan het editten is, geef ik op dit moment in het formulier via een (hidden) input type elke keer het projectid mee (of via de URL als het een link is). Maar ik kan dat natuurlijk ook via een sessie doen. Dat ik het huidige project waarop geklikt is in een sessie opsla en die variabele dan gebruik, totdat een gebruiker op een knop 'kies ander project' klikt en de sessie wordt beeindigd. Of dat hij meteen op een ander project klikt en dat dan de huidige projectsessie wordt beeindigd en een nieuwe projectsessie wordt gemaakt.

Dus nu wellicht de hele simpele vraag: Wat is meer gewenst, deze projectvariabele steeds meegeven, of er een sessie van maken?

Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Nu online
En wat gebeurt er met die sessie als een gebruiker meerdere tabs gebruikt om zijn werk te doen? Ik ga in tab 1 aan de slag, switch naar tab 2, en doe daar iets, switch weer terug naar tab 1 en sla dan - zonder het te weten - het verkeerde object op.

Niet handig dus

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 04-07 18:20
Gewoon je URL's goed inrichten:

website.com/projects/<project ID>
website.com/projects/<project ID>/create
website.com/projects/<project ID>/edit
website.com/projects/<project ID>/tasks
website.com/projects/<project ID>/tasks/<task ID>
etc

Als een gebruiker een bookmark maakt, verwacht hij ook op dezelfde pagina te komen.

Acties:
  • 0 Henk 'm!

Anoniem: 426269

Topicstarter
@ Ramon: Ja natuurlijk, dat is ook zo. Stom van me, ik had daar al eens aan gedacht, maar weer vergeten blijkbaar. Maar het is nu duidelijk! :)

@ Barryvdh: Aha okee, ik geloof dat ik het snap. :) Maar dat wat jij hier zegt is met URL rewrites he? Dat is nog 1 stapje verder voor mij, maar ga ik nu zeker proberen in te bouwen. Als ik je regels omzet in 'nog niet ge-rewrite' dan kom ik op zoiets uit voor de eerste regel:

website.com/show_product.php?product_id=7

Maar hoe ziet dan de URL eruit van je 2e, 3e of 4e regel? En natuurlijk last but not least, je 5e regel?

Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 04-07 18:20
Je kan een router gebruiken, of alles naar index.php sturen en daar de url opsplitsen. Afhankelijk daarvan kan je een bepaalde class/ functie aanroepen.

Acties:
  • 0 Henk 'm!

  • HamuNaptra
  • Registratie: April 2002
  • Niet online
Aanvullend op hierboven: bvb. website.com/index.php?pagina=product&actie=show&product=7

Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 04-07 18:20
HamuNaptra schreef op woensdag 13 mei 2015 @ 13:12:
Aanvullend op hierboven: bvb. website.com/index.php?pagina=product&actie=show&product=7
Nee eerder zo, zonder rewrite rules:

website.com/index.php/product/show/7

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$parts = explode('/', trim($path, '/'));
print_r($parts);

// Resultaat:
Array
(
    [0] => index.php
    [1] => products
    [2] => show
    [3] => 7
)


En als je de index.php eraf wil, redirect je dus alles met .htaccess:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>


En dan krijg je hetzelfde, minus de index.php in de eerste.

Of dus met een 'echte' router, waarmee je bepaalde route patterns koppelt aan bepaalde functies. Bijvoorbeeld https://github.com/nikic/FastRoute

PHP:
1
2
3
4
5
$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
    $r->addRoute('GET', '/products', 'productIndex');
    $r->addRoute('GET', '/products/create', 'productCreate');
    $r->addRoute('GET', '/products/{id:[0-9]+}', 'productShow');
});

Acties:
  • 0 Henk 'm!

Anoniem: 426269

Topicstarter
Aha, bedankt!

Dat met alles via de index.php doen (al dan niet met index.php weggehaald met .htaccess) doet me een beetje denken aan de fusebox methode met ColdFusion die ik van mijn baas vroegah (rond de eeuwwisseling) moest gebruiken. Alleen omdat je dan steeds zo'n hele lange index file kreeg met een heleboel IF's erin was ik er destijds steeds niet zo heel erg blij mee. :)

Maar ik denk dat hier de index.php dan alleen voor het doorsturen wordt gebruikt en er verder nauwelijks wat in staat? Nou ja, per mogelijke pagina/combinatie zullen er toch alle nodige includes moeten worden ingezet. Met IF's en Case. Toch?

Dat met een 'echte' router is comleet nieuw voor me. Nog nooit aan toegekomen. Geniet dat jouw eigen voorkeur?

Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 04-07 18:20
Ik gebruik tegenwoordig meestal een framework, daar zit bijna altijd wel een router in (Laravel/Symfony/Silex gebruiken Symfony router, Lumen FastRoute etc).
Dan meestal 1 bestand waarin de routes staan (zeg routes.php), maar dus niet de logica zelf. Die staan dan in losse controllers, opgesplitst per onderdeel.

Hier legt Fabien Potencier ook wat meer uit over het structureren van je applicatie door zelf een soort van framework te bouwen. Gaat in deel 3 en 4 over routing enzo.
https://github.com/fabpot...ob/master/book/part03.rst

Acties:
  • 0 Henk 'm!

Anoniem: 426269

Topicstarter
Okee, dat klinkt goed allemaal. En genoeg leesvoer en dingen voor mij om uit te pluizen. Nogmaals dank. :)
Pagina: 1