Comments (35)
Hi,
ich würde das nicht in die Session packen. Denn die Unterseiten können theoretisch ja auch aufgerufen werden, wenn du vorher nicht schon auf der Übersichtsseite warst. Dann musst du dir ja wieder was bauen, dass wenn ein Wert in der Session fehlt, du wieder auf die Übersicht leitest oder sowas, damit das alles richtig initialisiert wird.
Warum registrierst du nicht für jede Stadt mehrere Routen? Das Schema (Name der Unterseiten) ist doch sicher immer gleich oder? Also, dass du in jedem Schleifenduchlauf die Hauptseite regisitrierst und dann gleich noch die Unterseiten:
while(...) {
Route::add('/'.strtolower($newcityname).'/edit', function() {
...
});
Route::add('/'.strtolower($newcityname).'/details', function() {
...
});
Route::add('/'.strtolower($newcityname).'/do-something', function() {
...
});
}
Alternativ (Was ich empfehlen würde, weil es bestimmt viele Städte gibt) klannst du auch "Actions" nutzen. Also einen zweiten Parameter, der den Typ der Unterseite steuert:
Route::add('/([a-z0-9-_]*)/([a-z0-9-_]*)')', function($city, $action) {
// Select this city from db
// Switch the action
switch ($action) {
case 'edit':
// edit this city
break;
case 'details':
// Show city details
break;
case 'do-something':
// Mach irgendwas
break;
}
}, ['get']);
from simplephprouter.
Lol^^ My auto-responder sends automatic answers to github ^^
The Variable $v should be available inside member.php because its the same scope.
Just do not define it in member.php! Just use it.
from simplephprouter.
Hab ich versucht aber kein wert wird übermittelt
from simplephprouter.
die variable v ist dann leer
from simplephprouter.
kannst du die variable denn vor dem include ausgeben?
from simplephprouter.
ja vor dem include klappt es aber ich würde diese gerne der datei übergeben, ansonsten muss ich immer mit ?id=1 oder session arbeiten..
from simplephprouter.
Ich hatte da mal ein MVC basierend auf diesem Router und dem damaligen Simple MVC entworfen. Damit lassen sich GET und POST bequem an die aufzurufende Methode des jeweiligen Controllers übergeben. Bei Bedarf suche ich mal das Projekt raus.
from simplephprouter.
Seltsam. Include tut nichts anderes, als den Code dort rein zu pasten. Sicher, dass du die Variable nicht innerhalb einer Klasse oder Funktion verwendest? Dann musst du sie erst mit Global verfügbar machen. Ansonsten versuche mal diese ähnlich wie in der Antwort oben in ein superglobales Array zu kopieren: _GET['var'] = $var; Und dann nimmst du in deiner Include den Wert aus _GET.
from simplephprouter.
Es muss natürlich $_GET heißen.
from simplephprouter.
asooo ich hab nur $id=$v aufgerufen, ich versuch es mal mit get^^
from simplephprouter.
ja das muss aber trotzdem gehen. Das hat auch nix mit dem Router zu tun denke ich. mach dir doch mal ein testfile und Include darin ein anderes testfile. dann setze in dem patent file eine variable. die sollte dann im child file enthalten sein.
from simplephprouter.
klappt aber auch nicht
habe die route http://127.0.0.1/app/test/1
Route::add('/app/test/([0-9]*)', function($v) { include('test.php'); }, ['get','post']);
innerhalb der test.php
$v = $_GET['v']; echo 'Hallo Variable '.$v;
und auch wie du geschrieben hattest folgendes probiert
$_GET['v'] = $v;
from simplephprouter.
if you want to pass an external variable into the function() {}, you can do this:
Route::add('/app/test/([0-9]*)', function($v) use ($external) { echo $external; include('test.php'); }, ['get','post']);
from simplephprouter.
so i can use it in test.php?
from simplephprouter.
Before doing any includes and anything, try echoing the variables... you'll see what passes and what's not.
$_GET & $_POST doesn't have to be passed on, it's in the Global scope by definition.
If you want to pass a $v variable that is in your route script PHP page, then you can use what I've said earlier. it is working, i often use this way to pass global config and extra variables that doesn't come from the query from route:add() path.
from simplephprouter.
dont work by me
from simplephprouter.
what doesn't work? try this to debug yourself:
Route::add('/app/test/([0-9]*)', function($v) { echo "this value is: ".$v."<br>"; }, ['get','post']);
- goto http://127.0.0.1/app/test/1
- If you don't see a response like "this value is: 1" on your screen, then the route didn't go there in your script... maybe you already have another regex before that catch it? whats the response? a 404? etc?
from simplephprouter.
OK. I think this is a confusing topic. I have found this: https://stackoverflow.com/questions/4675932/passing-a-variable-from-one-php-include-file-to-another-global-vs-not
The guys there are also confused. Please try to global $var; inside your member.php. If this should work please report your PHP Version and a copy of your PHP.ini. Maybe some PHP Versions or configurations cannot access variables inside includes that was defined in other includes without global them.
from simplephprouter.
here is the same Problem again. https://stackoverflow.com/questions/30346991/variable-not-accessible-in-included-php-file
This sounds like some kind oft a PHP bug for me.
from simplephprouter.
hi. ich kannst leider gerade nicht testen. bin noch 2 Wochen ohne Rechner unterwegs.
from simplephprouter.
Alles gut hat keine eile, würde mich aber in Zukunft Interessieren wie man da weiter vor geht
from simplephprouter.
Ach ich hätte zusätzlich noch eine Frage, ich würde gern ein bestimmten teil der Routen Datenbank basiert machen, sprich das du eigene Routen anlegen kannst, quasi wie ein cms wenn man eine neue Unterseite anlegen möchte, allerdings bin ich etwas ratlos wie ich da anfangen soll. Vielleicht ein Tipp für mich ?
from simplephprouter.
Route host/foo/bar
Innerhalb der aufgerufenen Funktion foo dann mit der Variable bar den Content laden.
Wenn bar in der Datenbank nicht existiert entsprechend umleiten.
So würde ich es wohl machen.
from simplephprouter.
verstehe, dachte es gibt da noch eine andere möglichkeit aber das reicht schon.
from simplephprouter.
Hi @Nex4T ,
zu deinem Problem: Folgendes klappt bei mir komplett ohen Probleme. Auszug aus meiner index.php:
Route::add('/member/([0-9]*)', function($v) {
include('member.php');
}, ['get','post']);
Die Datei member.php:
<?php
echo $v;
Die URL http://localhost/test/member/7 gibt mir einfach "7" im Browser aus. Wie erwartet. Bitte schreibe mir doch nochmal, um welche PHP-Version es sich bei dir handelt. Ich habe bei mir gerade PHP 7.2 laufen.
from simplephprouter.
@Nex4T Zu deiner Datenbank-Frage:
Du hast generell einige verschiedene Möglichkeiten:
-
Nutze statische Ruten, wo sie gebraucht werden. Zum Beispiel legst du ja routen wie /login oder /admin nicht in die Datenbank, weil die ja immer gleich sind.
-
Nutze komplett dynamische Routen aus der Datenbank. Angenommen du hast eine Tabelle "Pages", so könntest du in dem Feld "slug" einfach den Kompletten Pfad speichern. Im PHP machst du dann eine Querry und liest alle Datensätze aus der Tabelle aus Du kannst dann über diese iterieren und Route::add dann dynamisch aufbauen. Pseudocode:
foreach($pages as $page) {
Route::add($page['slug'])', function($v) {
// load your theme and push the page data to it
}, ['get']);
}
- Nutze Teildynamische routen. Angenommen du hast einen Blogbereich so liegen die Beiträge evtl. immer unter /blog. In der entsprechenden Tabelle speicherst du nun nur den Teil-Slug des Blogposts. Also zum Beispiel "mein-toller-artikel-uerber-php". Dann gehst du ähnlich vor wie bei Punkt 2 und registrierst alle blog-beiträge als route. Pseudocode:
foreach($posts as $post) {
Route::add('/blog/'.$post['slug'])', function($v) {
// load your theme and push the post data to it
}, ['get']);
}
Mit wachsender Zahl an Seiten oder Posts werden die Methoden 2 und 3 halt langsam, weil immer alles aus den Tabellen geladen und als Route registriert wird. Darum kannst du dir auch überlegen das System umzukehren und nur eine Route für den Blog anlegen. Pseudocode:
Route::add('/blog/([a-z0-9-_]*)')', function($slug) {
// load only this post
// SELECT * FROM post WHERE slug = $slug (Note: Use mysqli to escape the $slug string for security reason!)
// Trigger your own 404 logic if the slug was not found
}, ['get']);
Wie du siehst gibt es viele Wege. Es kommt eben darauf an, was du genau machen willst. Letztendlich werden sich diese Methoden in einem Projekt evtl. auch mischen.
from simplephprouter.
Grüß dich,
hab das hier relativ spät gesehen, hab jetzt folgendes gemacht
`if ($result2 = $con->query($query2)) {
while ($row2 = $result2->fetch_assoc()) {
$townname = utf8_encode($row2["name"]);
$search = array('ö', 'ä', 'ü', 'Ö', 'Ä', 'Ü', ' ');
$replace = array('oe', 'ae', 'ue', 'oe', 'ae', 'ue', '-');
$newcityname = str_replace($search, $replace, $townname);
Route::add('/'.strtolower($newcityname), function() {
$_SESSION['townname'] = $newcityname;
$townname = $_SESSION['townname'];
frontendHead($townname);
frontendNavi($townname);
frontendContentExplorer('startseite');
frontendFooter();
frontendEnd();
});
}
$result2->free();
}
`
nur wie kann Ich jetzt fixen routen auch was übermitteln? Iach brauch die daten aus der db jeweils in der Session, wenn ich z.b auf den link /muenster klicke brauch ich münster in der session
from simplephprouter.
Hey. Ich habe absolut keine Idee, warum du beim Routing die Session brauchen solltest.
from simplephprouter.
Angenommen der Link citi/muenster wird aufgerufen, wäre es dann nicht sinnvoll, wenn man den Namen der Stadt aus der Datenbank mithilfe des Links abruft?
Zum Beispiel
Id 1
slug muenster
name Münster
Dann müsste man auch nichts im String ersetzen. Ich würde dann auch eher die id in der Session speichern, um später weitere Daten aus der entsprechenden Zeile zu holen.
from simplephprouter.
ja gut das könnte ich auch machen mit der id aber die wird nicht übernommen, das ding ist hinter jeder stadt stecken noch viele andere daten, wie ich jetzt was speicher um an die daten zu kommen ist eigentlich egal, ich brauche sie halt einfach, nur das ding ist ich kann nach wie vor nichts übergeben
from simplephprouter.
Also vorher hab ich es so gemacht
Route::add('/(.*)', function($v) {
hat auch Funktioniert, allerdings wenn ich jetzt etwas eingebe was nicht in der Datenbank steht wie z.b /google, wird die Route trotzdem ausgeführt halt ohne ausgaben dahinter .
deswegen dachte ich mir ich mache es wie im beispiel lasse es über eine schleife ausgeben und jeweils bei der Route id oder name ( was für mich keine relevanz hat ) der stadt in eine session speichern das ich anschließend damit weiter arbeiten kann, auf allen anderen subpages etc.
mein Problem ist nun da ich ja jetzt feste Routen setze krieg ich den wert nicht mehr in die Session
from simplephprouter.
Was willst du denn genau übergeben? Hast du ein Formular oder so? Oder Mehrere Formulare auf mehreren aufeinander folgenden Seiten? Ich verstehe das Problem noch nicht ganz. Ich würde dir bei sowas aber empfehlen die Daten zunächst im Frontend zu sammeln (JavaScript und LocalStorage) und dann alles am Ende an eine einzige Api zu posten. Das macht alles sauberer.
from simplephprouter.
In erster Linie möchte ich nur den Stadtnamen im Link sowie im Content haben, alles weitere kann ich ja dann dort verarbeiten, ich lasse ja jetzt in der Schleife die Routen ausgeben nur bekomme ich danach den Stadtnamen nicht mehr im Content rein. Die variable $stadt würde ich gerne auf der unterseite ausgeben lassen aber funktioniert nicht, deswegen wollte ich das ja in die Session packen.
`if ($result2 = $con->query($query2)) {
while ($row2 = $result2->fetch_assoc()) {
$townname = utf8_encode($row2["name"]);
$search = array('ö', 'ä', 'ü', 'Ö', 'Ä', 'Ü', ' ');
$replace = array('oe', 'ae', 'ue', 'oe', 'ae', 'ue', '-');
$newcityname = str_replace($search, $replace, $townname);
Route::add('/'.strtolower($newcityname), function() {
$stadt = $newcityname;
frontendHead($newcityname);
frontendNavi($newcityname);
frontendContentExplorer('startseite');
frontendFooter();
frontendEnd();
});
}
$result2->free();
}
`
from simplephprouter.
i have the same problem, i cant use vars out of the route in the route
$fortest = '1'; Route::add('/test', function ($v) { echo $fortest; echo 'hallo'; }, ['get', 'post']);
dont work
from simplephprouter.
@schlossmacher123 Please refer to this solution: #31
from simplephprouter.
Related Issues (20)
- proper way of a 404 error page display HOT 2
- Apache removes all $_REQUEST, $_POST, etc HOT 6
- haeder Problems HOT 11
- add Route by HOT 5
- everything redirects to 404 HOT 2
- multilanguage router HOT 4
- File protection from direct access HOT 8
- Override all Routes/Maintenance Mode HOT 2
- can you provide an additional example for the api example ? HOT 7
- all routes should return the full url of the page and its title HOT 4
- How to use Views with this Router? HOT 7
- Grouping/Sub-Route Request. HOT 2
- Example for named function with parameters HOT 1
- Further options in url HOT 1
- "Use return instead of echo": doesn't work when the function is called by pathNotFound() HOT 1
- Subdomain Support HOT 1
- excluding a directory from using the route? HOT 5
- Using query parameters HOT 3
- Redirect to another route HOT 1
- URI with symbols HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from simplephprouter.