Hoe maak ik een id uit een controller beschikbaar in een andere controller in dezelfde class
waar 2 de id is waar ik op doel. Vervolgens heb ik die id nodig voor verdere verwerking. Eerst had ik deze gecombineerd met mijn JS functies, maardiversen mensen rade mij af om JS met PHP te combineren dus mijn vraag is: Hoe maak ik deze id beschikbaar in een andere controller die wel in dezelfde class aanwezig is?
Alvast bedankt
Edit:
Titelfix en een fout eruit gehaald.
Gewijzigd op 11/06/2018 18:29:57 door - Ariën -
Gebruik je een Router in PHP?
Maak je een gebruik van bepaalde frameworks? Of is het een zelfgeschreven class?
Toevoeging op 11/06/2018 17:04:55:
- Ariën - op 11/06/2018 16:10:50:
Gebruik je een Router in PHP?
@- Ariën -. Ja ik gebruik een Router
Het is nogal handig als je hier een soort van integrale aanpak voor verzint, zodat je hier geen omkijken meer naar hebt.
Gewijzigd op 11/06/2018 17:05:40 door Thomas van den Heuvel
Heb je wat relevante code van je framework?
@- Ariën -. Wat zou je willen zien. Dit is bijvoorbeeld een gedeelte van de Router:
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
return [
'default' => '/page',
'errors' => '/error/:code',
'routes' => [
// Front-end
'/page(/:action(/:id))' => [
'controller' => 'Controller_Page',
'action' => 'index',
],
'/error(/:code)' => [
'controller' => 'Controller_Error',
'action' => 'index',
],
'/(:action(/:id))' => [
'controller' => 'Controller_Page',
'action' => 'index',
],
]
];
?>
return [
'default' => '/page',
'errors' => '/error/:code',
'routes' => [
// Front-end
'/page(/:action(/:id))' => [
'controller' => 'Controller_Page',
'action' => 'index',
],
'/error(/:code)' => [
'controller' => 'Controller_Error',
'action' => 'index',
],
'/(:action(/:id))' => [
'controller' => 'Controller_Page',
'action' => 'index',
],
]
];
?>
Wat wil je dat ik nog meer toon?
Gewijzigd op 11/06/2018 19:27:32 door - Ariën -
Nee de Router is geen Class
Edit:
Het is niet nodig om het laatste voorgaande bericht integraal te quoten.
Gebruik voor een reactie de 'Snel reageren' onderaan een topic.
Gebruik voor een reactie de 'Snel reageren' onderaan een topic.
Gewijzigd op 11/06/2018 19:28:53 door - Ariën -
is het niet een idee om dit naar een class om te bouwen?
Als het "veel later" is zou ik zelf de waarde aan de client meegeven (in een hidden veld, of als var in JS). Voor de "volgende request" kun je deze waarde dan weer gebruiken om de URL voor de request op te bouwen. Nadeel is dan dat de gebruiker de waarde aan kan passen, maar in plaats van blog_posts/post/2 kan ie ook blog_posts/post/'"<script>alert(1235)</script) meegeven, dus de code om dat ID te controleren moet je toch al ergens hebben. Eventueel kun je nog een controle hash toevoegen, waardoor je (ook) kunt controleren dat het ID niet door de gebruiker kan zijn aangepast.
Als het "direct" is zou je het ID in de session op kunnen slaan. Dan weet je zeker dat de gebruiker 'm niet kan veranderen. Nadeel van sessions is dat ze op een gegeven moment verlopen (als de gebruiker te lang geen interactie met je site heeft). Ook kan dit spaak lopen als de gebruiker zich niet aan het door jouw bedachte "pad" houd (dat heb je al heel snel als ze bijvoorbeeld 2 verschillende posts in 2 tabbladen open hebben staan - die delen dan dezelfde sessie).
In Controller_Blog heb ik een functie voor de detail pagina van een blogpost/artikel (public function postAction($params)) waarbij $params de id vertegenwoordigd van een bepaald artikel/blogpost welke wordt gegenereerd wanneer iemand op de link verder lezen klikt in de listing (http://flyingparadise.local/blog_posts/post/2)
Ik gebruik de jquery/ajax setInterval functie om te checken voor nieuw reacties op artikelen. Dat checken gebeurt in een andere functie in Controller_Blog class (check_updatesAction()). Voor dat checken heb ik de id (post_id) nodig die in de eerder genoemde functie (public function postAction($params)) is aangemaakt. Voorheen gebruikte ik de in die functie gegenereerde post_id rechtstreeks in JS
en kon deze dan vervolgens als data meesturen naar check_updatesAction(). Maar zoals ik in de openings post al aangaf, zijn er tal van mensen die mij hebben afgeraden PHP en Jquery op die manier te mixen. Vandaar dus de vraag op welke manier ik post_id uit de functie post ook in de functie check_updates kan gebruiken.
Ik hoop dat dit wat duidelijkheid geeft
Misschien moet je die "tal van mensen" eens vragen hoe zij dat doen. Ik kan van alles verzinnen, maar omdat je je check toch via JavaScript setInterval() doet lijkt het me het meest efficient om het ID ook gewoon in JS op te slaan. Je kunt 'm op nog 100 andere manier opslaan, maar uiteindelijk moet je 'm toch via JS "ophalen". Dus waarom dan moeilijk doen via een buitenbocht (mijn mening).
Het nadeel is dat je een ienienmienie stukje JavaScript in PHP genereert, maar als je de JavaScript die je nodig hebt om deze check te doen gewoon in een losse .js file opslaat hou je het verder prima gescheiden (kortom: je moet geen hele lappen JavaScript in je PHP/HTML opnemen - dat is wel waar).
Of een URL waaraan parameters gekoppeld zijn (interne vertaling naar o.a. een blog-id gekoppeld aan de URL)?
EDIT: POST actions worden sowieso niet gecrawled, dus deze hoeven geen SEO vriendelijke URLs te hebben, kan best iets zijn als blogComments?action=add&post=88.
Gewijzigd op 11/06/2018 21:43:18 door Thomas van den Heuvel
@Rob. Ja dat dacht ik dus ook. Het gaat in totaal om een Variabele. Ik laat dat inderdaad dus maar gewoon zo. Het werkt dus dat is het belangrijkste. Heb ik overigens nog wel een kort vraagje. Wanneer ik de complete JS functie inline heb staan werkt alles prima. Zet ik het echter in een js file plaats en dus genoodzaakt ben om het PP gedeelte tussen aanhalings tekens te plaatsen:
"
dan werkt het niet langer. Hoe kan ik dat oplossen?
@Thomas: Er is/bestaat geen enkele relatie tussen de twee functies behalve dat in functie post de post_id staat die ik dus eigenlijk ook in de functie check_update nodig heb. Het gaat er in dit gedeelte niet om dat er iets wordt toegevoegd door een bezoeker die op de pagina is. Dat zou net zo goed jij kunnen zijn of Rob die een reactie plaatst dus aan die parameters gekoppeld aan de url heb ik in dit geval niets
wat je dan moet doen is in je .js file:
En in je HTML (via PHP):
In je .js initialiseer je de postId dus als een globale variabele. In je HTML geef je 'm de echte waarde (je .js file moet dus voor dit stukje inline script worden geladen!). Tegen de tijd dat de setInterval voor het eerst aan de gang gaat heeft postId al lang die waarde.
Rob Doemaarwat op 11/06/2018 22:45:39:
Die .js file wordt niet door de PHP parser gehaald, dus die variabele wordt niet ingevoegd (maar d'r staat letterlijk wat je hierboven hebt staan).
wat je dan moet doen is in je .js file:
En in je HTML (via PHP):
In je .js initialiseer je de postId dus als een globale variabele. In je HTML geef je 'm de echte waarde (je .js file moet dus voor dit stukje inline script worden geladen!). Tegen de tijd dat de setInterval voor het eerst aan de gang gaat heeft postId al lang die waarde.
wat je dan moet doen is in je .js file:
En in je HTML (via PHP):
In je .js initialiseer je de postId dus als een globale variabele. In je HTML geef je 'm de echte waarde (je .js file moet dus voor dit stukje inline script worden geladen!). Tegen de tijd dat de setInterval voor het eerst aan de gang gaat heeft postId al lang die waarde.
@ob. Dat werkt perfect heel erg bedankt voor de input
Voor polling maakt dat toch echt niets uit hoe je URL er uitziet, dus bijv. /ajax/blog/checknewposts.php?id=88.
Je hoeft niet alles op voorhand / per definitie in te metselen in je framework en mits je hier voorzieningen voor treft hoeven URLs ook niet strak geregissserd te zijn wat je ook veel meer vrijheid geeft om dingen te doen.
Op dit moment klinkt het gewoon alsof je beperkt wordt door je eigen (routing) ontwerp. En zelfs al is dat maar een gevoel, dan zou ik dat gevoel nog steeds verkennen om te zien of je routing niet wat flexibeler kan.
Gewijzigd op 12/06/2018 00:07:56 door Thomas van den Heuvel
Rob Doemaarwat op 11/06/2018 22:45:39:
Die .js file wordt niet door de PHP parser gehaald, dus die variabele wordt niet ingevoegd (maar d'r staat letterlijk wat je hierboven hebt staan).
wat je dan moet doen is in je .js file:
En in je HTML (via PHP):
In je .js initialiseer je de postId dus als een globale variabele. In je HTML geef je 'm de echte waarde (je .js file moet dus voor dit stukje inline script worden geladen!). Tegen de tijd dat de setInterval voor het eerst aan de gang gaat heeft postId al lang die waarde.
wat je dan moet doen is in je .js file:
En in je HTML (via PHP):
In je .js initialiseer je de postId dus als een globale variabele. In je HTML geef je 'm de echte waarde (je .js file moet dus voor dit stukje inline script worden geladen!). Tegen de tijd dat de setInterval voor het eerst aan de gang gaat heeft postId al lang die waarde.
@Rob Doemaarwat. Ik had toch iets te vroeg gejuigd gisteren. Zodra ik the post_id inline zet:
en het overige in een js file, stopt het pollen. Geen idee hoe dat komt
Javascript kent zelf geen PHP.
Gewijzigd op 12/06/2018 12:43:45 door - Ariën -
Zet anders eens in/om je interval functie iets ala:Zie je deze meldingen (console.warn) in je Console voorbij komen?