CodeIgniter: die Übergabe von Variablen via URL - alternativen zur Verwendung ERHALTEN
Ich bin neu bei CodeIgniter und habe gerade entdeckt, die Schwierigkeiten mit der GET-Methode zum übergeben von Variablen über die URL (z.B. domain.com/page.php?var1=1&var2=2).
Entnehme ich, dass ein Ansatz ist die übergabe der Variablen in der URI-Segmente, aber habe noch nicht ganz herausgefunden, wie das zu tun, doch wie es scheint, zum erstellen der Erwartung, dass eine Funktion in der Steuerung benannt, die als spezifische URI-segment????
Sowieso Statt mit GET habe ich beschlossen, das verwenden von POST durch die Anpassung einen submit-button (getarnt als link) mit den Variablen in versteckte Eingabe-Felder. Ich habe die folgende Lösung scheint zu funktionieren, aber Frage mich, ob ich bin auf dem richtigen Weg ist oder ob es eine einfachere Art der übergabe von Variablen über einen link innerhalb von CodeIgniter?
Habe ich die folgende Klasse in application/libraries/
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class C_variables {
function variables_via_link($action, $link_text, $style, $link_data) {
$attributes = array('style' => 'margin:0; padding:0; display: inline;');
echo form_open($action, $attributes);
$attributes = array('class' => $style, 'name' => 'link');
echo form_submit($attributes, $link_text);
foreach ($link_data as $key => $value){
echo form_hidden($key, $value);
}
echo form_close();
}
}
?>
Mit den folgenden CSS:
/*
SUBMIT BUTTON AS LINK
adapted from thread: http://forums.digitalpoint.com/showthread.php?t=403667
Cross browser support (apparently).
*/
.submit_as_link {
background: transparent;
border-top: 0;
border-right: 0;
border-bottom: 1px solid #00F;
border-left: 0;
color: #00F;
display: inline;
margin: 0;
padding: 0;
cursor: hand /* Added to show hand when hovering */
}
*:first-child+html .submit_as_link { /* hack needed for IE 7 */
border-bottom: 0;
text-decoration: underline;
}
* html .submit_as_link { /* hack needed for IE 5/6 */
border-bottom: 0;
text-decoration: underline;
}
Link erstellt, mit dem folgenden code in der ANSICHT:
<?php
$link = new C_variables;
$link_data=array('var1' => 1, 'var2' => 2);
$link ->variables_via_link('destination_page', 'here is a link!',
'submit_as_link', $link_data);
?>
Danke für Eure Hilfe...
InformationsquelleAutor John Durrant | 2010-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um ehrlich zu sein, erstellen Sie ein Formular zur Durchführung des Auftrags von hyperlinks ist ein bisschen eine semantische, Nein, Nein.
Codeigniter standardmäßig vollständig entfernt alle $_GET-Parameter. Also ohne aktivieren von query-strings in der Konfigurationsdatei, die Sie nicht tun können, die folgenden:
http://my-domain.com/script/?param=1¶m2=foo
Für einen Anfänger -, segment-basierte URLs sind ein bisschen eine Lernkurve, aber bald Sinn machen. Ein gutes Beispiel Produktion, wie die segment-basierte URLs funktionieren in der Praxis ist Stack Overflow!
Also, wenn Sie wollte, kopieren Stack Overflow Frage-view-Seite mit der folgenden URL in codeigniter:
In Ihrem Standard-controller-erstellen Sie die folgende Methode:
Das Dritte segment (Frage, Titel slug) ist effektiv ignoriert. Aber Sie könnte es packen mit den folgenden:
Mehr Informationen hier: https://codeigniter.com/user_guide/libraries/uri.html
Wenn Sie nicht wie die Idee, dass man den Namen einer Methode im controller mit der ersten URI-segment. Sie können eine benutzerdefinierte route in der Routen-Konfiguration.
So, vorstellen, erstellen Sie einen controller namens
questions_controller.php
, und über eine Methode namensshow_question_by_id()
. Halten die/questions/1234/some-text-here
Stil URI, aber behandeln Sie es mit dem controller/Methode, die oben, können Sie die folgende route:Mehr Informationen hier: https://codeigniter.com/user_guide/general/routing.html
Wenn Sie möchten, eine unendliche Anzahl von Parametern in der URL, oder nicht wissen, welche Parameter Sie erwarten z.B.
mysite.com/my_page/param1/12/param2/foo/param3/bar/param4/baz/another-param/xyz-123
Können Sie Spalten diese in ein assoziatives array mit den
$this->uri->uri_to_assoc(1)
URI-Methode auf, um die folgenden:Könnte Sie dann behandeln Sie diese genau so, wie wenn du mit dem $_GET-array. Sie können dann kombinieren Sie diesen Ansatz, mit Routen zu geben, die Sie praktisch jede URI und Anwendung der Struktur, die Sie mögen. Sie erhalten auch den Vorteil, dass die einzelnen parameter und segment wurde automatisch bereinigt. Es ist ein bisschen eine Lernkurve, und es scheint wie zusätzliche Arbeit zu beginnen, aber ist eigentlich ziemlich flexibel, und hilft Ihnen, bauen eine gut strukturierte Anwendung.
es ist eine gute accademic Lösung. Aber twitter, ebay, und anderen weiter zu bedienen. Auch erhalten ist ein standard (ja, in der Tat ist es das HTTP-Protokoll!). Damit alle, die Diskussionen sind einfach nur keinen Sinn. HTTP-GET-verb wird nicht unterstützt, die von Codeigniter, dass der Rahmen etwas unbrauchbar, was die Tatsache, dass ein http-framework. Gute Lösung, aber es ist nicht für das web.
InformationsquelleAutor
Warum auf der Erde Sie veröffentlichen Sie Ihre CSS-wenn Sie kämpfen mit Query-Strings?
Wahnsinn.
Sowieso, Sie können neu erstellen, die den Zugriff auf die Abfrage-String in mehrere Möglichkeiten in CodeIgniter.
uri_to_assoc()
Erstens gibt es die wunderbare assoziative URI-Segmente.
Können Sie verwenden Sie den folgenden code, um den Zugriff auf diese zwei Werte:
Dies ist natürlich ein Ersatz für query-strings, aber wenn Sie verwenden können, dies zu tun.
parse_str()
Wenn Sie den " global code wie ein Haken oder MY_Controller Sie können wieder Auffüllen, $_GET mit dem folgenden Einzeiler:
REQUEST_URI
Stellen Sie Ihre $config['uri_protocol'] , "REQUEST_URI" und aktivieren von Abfrage-strings weiter unten. REQUEST_URI nicht funktionieren auf allen Servern, so ist dies nicht die perfekte Methode, obwohl es das einfachste.
styling das submit-Feld? Sind Sie sicher, dass Sie auf der rechten Seite Q und Eine Website?
Beruhigen John, einfach nur ein bisschen Spaß. War der Beitrag keine Hilfe?
Es noch nicht versucht, Phil, wird aber - nochmals vielen Dank.
sollten dankbar sein, dass Phil Sturgeon beantwortet deine Frage 🙂 beschweren sich nicht über seine witzigen Bemerkungen.
InformationsquelleAutor
Verwende ich diese und es funktioniert:
zuerst setzen Sie Ihre Variablen im Abfrage-string wie diesen:
in mycontroler ich erhalten Parameter, die in dieser Weise:
InformationsquelleAutor