Vollständige Version anzeigen : Controller und Parameter ?
ChristianFischer
18.06.2007, 21:46
Hallo,
bis gerade eben dachte ich ja noch das wenn man sich an die Standardordner aufteilung hält müsste ne Parameter übergabe an einen Controller kein Problem sein.
Naja hab ich angefangen zu basteln und siehe da keine MEthode namens "getParam" gefunden ^^.
Naja jetzt hab ich bei Ralf Egert im Tutorial gesehen das er ja ne extra Route dafür einrichtet. Copy & Paste -> ausprobiert.
Siehe da es geht nicht :)
Ich will auf den Controller news zugreifen, dort auf die Action detail. Dem würde ich gern einen Parameter übergeben.
Die URl sieht jetzt so aus:
http://localhost/spektrum/spektrum/public/news/detail/2 (http://localhost:88/spektrum/public/Bilder/content_06.gif)
Mein Problem ist jetzt das er garnicht in den Detail Controller reingeht.
Mfg Christian
Kannst du auch den Fehler(Output) hier posten? Vielleicht eine fehlerhafte Front-Controller-Konfiguration?
KingCrunch
18.06.2007, 23:07
Irgendwie lief das mit aus /key/value zu "key" => "value" bei mir nur mit der Standardroute....
ChristianFischer
18.06.2007, 23:09
ich bekomme keinen fehler er zeigt einfach nur die index action des news controllers an
Hast du probiert das Request-Obj. zu dumpen? Poste dann wenigstens das hier und deine Route-Cfg.
KingCrunch
19.06.2007, 00:28
@wschott: Du weißt aber, dass das mehrere Seiten sind? ;)
Poste mal den Rückgabewert von getParams!
mm ich mein das des nicht mehrere seiten sind :P
KingCrunch
19.06.2007, 01:02
Ach, Ruhe! Ich hab Recht :D
Fakt ist: Er kennt die Route nicht richtig. Entweder leitet um, oder er "wegwählt" (Babelfish rult xD) falsch. Ich tippe auf zweiteres und anhand der Parameter lässt sich dies womöglich erkennen. Eine Problemlösung ist es allerdings noch nicht.
Blackflash
19.06.2007, 07:40
Ähm... Irgendwie sieht es mir so aus, als hättest du da keinen Key angegeben.
/news/detail/detail/2:
Controller: News
Action: Detail
Parameter: detail = 2
/news/index/detail/2
Controller: News
Action: Index
Parameter: detail = 2
Der Controller selbst hat keine Parameter, die sind im Request versteckt. D.h. über
echo $this->getRequest()->getParam('detail'); // müsste in deinem Beispiel 2 ausgeben
Ich hoffe, ich habe jetzt nichts falsch verstanden. :-)
/news/detail/detail/2:
Controller: News
Action: Detail
Parameter: detail = 2
/news/index/detail/2
Controller: News
Action: Index
Parameter: detail = 2
echo $this->getRequest()->getParam('detail'); // müsste in deinem Beispiel 2 ausgeben
Ich glaub, dass das nicht so wirklich stimmt.
Müsste es nicht so heißen?
route: /news/detail/:id
defaults.controller = news
defaults.action = detail
und mit der url: "/news/detail/2" ist dann das im Request-obj drin:
controller: news
action: detail
parameter: id = 2
und dann lässt es sich mit
echo $this->getRequest()->getParam('id');
@ChristianFischer: Zend_Controller_Action::_getParam() benutzt $this->getRequest()->getParam() soweit ich weiß, vermutlich hieß es früher einfach getParam()
@Müsli woher weißt du eigentlich, dass es mehrere Seiten (e.g. redirect) sind?
KingCrunch
19.06.2007, 16:58
Weiß ich? Oo
ChristianFischer
19.06.2007, 19:13
Also ich versteh nich was ihr meint mit mehrere Seiten.
Hier ist das request Objekt wenn ich auf:
http: localhost/spektrum/spektrum/public/news/detail/1
gehe.
Komischer weise siehts irgendwie unpassend aus :)
object(Zend_Controller_Request_Http)#37 (13) { ["_requestUri:protected"]=> string(39) "/spektrum/spektrum/public/news/detail/1" ["_baseUrl:protected"]=> string(41) "http://localhost/spektrum/spektrum/public" ["_basePath:protected"]=> NULL ["_pathInfo:protected"]=> string(0) "" ["_params:protected"]=> array(3) { ["controller"]=> string(5) "index" ["action"]=> string(5) "index" ["module"]=> string(7) "default" } ["_aliases:protected"]=> array(0) { } ["_dispatched:protected"]=> bool(true) ["_module:protected"]=> string(7) "default" ["_moduleKey:protected"]=> string(6) "module" ["_controller:protected"]=> string(5) "index" ["_controllerKey:protected"]=> string(10) "controller" ["_action:protected"]=> string(5) "index" ["_actionKey:protected"]=> string(6) "action" } object(Zend_Controller_Request_Http)#37 (13) { ["_requestUri:protected"]=> string(39) "/spektrum/spektrum/public/news/detail/1" ["_baseUrl:protected"]=> string(41) "http://localhost/spektrum/spektrum/public" ["_basePath:protected"]=> NULL ["_pathInfo:protected"]=> string(0) "" ["_params:protected"]=> array(3) { ["controller"]=> string(5) "index" ["action"]=> string(5) "index" ["module"]=> string(7) "default" } ["_aliases:protected"]=> array(0) { } ["_dispatched:protected"]=> bool(true) ["_module:protected"]=> string(7) "default" ["_moduleKey:protected"]=> string(6) "module" ["_controller:protected"]=> string(4) "news" ["_controllerKey:protected"]=> string(10) "controller" ["_action:protected"]=> string(5) "index" ["_actionKey:protected"]=> string(6) "action" }
Hier noch der Teil aus meiner Settings.php
//Diese Route bewirkt das wir die URl um einen Parameter ergänzen können
$routeParameters = new Zend_Controller_Router_Route(':controller/:action/:id', array('action' => 'index'));
$router->addRoute('paramRoute', $routeParameters);
Irgendwie stärt mich das übergebene array.
ufff, editier das mal, wandel das quote in "code" um, und wenn möglich noch richtig "in zeilen packen". so isses nen krampf ^^
object(Zend_Controller_Request_Http)#37 (13) {
["_requestUriProtected"]=> string(39) "/spektrum/spektrum/public/news/detail/1"
["_baseUrlProtected"]=> string(41) "http://localhost/spektrum/spektrum/public"
wenn ich das richtig sehe machst du das "falsch" *grübel*
:modul/:controller/:action/:key/:value is glaub ich richtig,
bei dir schauts nach
:modul/:controller/:value aus. (news/detail/1)
ChristianFischer
19.06.2007, 19:39
Hm ne das funktionert nicht ich glaube die Route die ich setze ist falsch.
$routeParameters = new Zend_Controller_Router_Route(':controller/:action/:id', array('action' => 'index'));
$router->addRoute('paramRoute', $routeParameters);object(Zend_Controller_Request_H ttp)#45 (13)
{ ["_requestUri:protected"]=> string(42) "/spektrum/spektrum/public/news/detail/id/1"
["_baseUrl:protected"]=> string(41) "http://localhost/spektrum/spektrum/public"
["_basePath:protected"]=> NULL ["_pathInfo:protected"]=> string(1) "1" ["_params:protected"]=> array(3)
{ ["controller"]=> string(1) "1" ["action"]=> string(5) "index"
["module"]=> string(7) "default" } ["_aliases:protected"]=> array(0) { } ["_dispatched:protected"]=> bool(true)
["_module:protected"]=> string(7) "default"
["_moduleKey:protected"]=> string(6) "module"
["_controller:protected"]=> string(1) "1" ["_controllerKey:protected"]=> string(10) "controller"
["_action:protected"]=> string(5) "index" ["_actionKey:protected"]=> string(6) "action" }
Bleistift
19.06.2007, 19:41
Ehm... Kannst du bitte die Code-Tags verwenden und die "gedumpten" Sachen richtig einrücken? So ist das (wie bereits erwähnt) ein Krampf für Geist und Seele ;)
ChristianFischer
19.06.2007, 19:44
was ich auch komisch finde ist das wenn ich :
http://localhost/spektrum/spektrum/public/news
Aufrufe er trotzdem annimmt das er im Controller index ist !
Er denkt anscheinend er ist immer im Index Controller ? Irgendwie find ich das grad mist.
Also laut deinem ersten Dump ist ja das Req-Obj. auf IndexContoller::indexAction() eingestellt.
Btw, hast du es auch nach dem Routing (z.B. in der Action, aber auf jeden Fall nach $front->dispatch(); ) ausgegeben?
Laut deinem zweiten Dump ist deine Action => "index" und dein Controller => "1". Denke da nun mal, dass es an deiner Route-Cfg. liegt
Mach mal die Route zu der standardmäßigen (:controller/:action):
$routeParameters = new Zend_Controller_Router_Route('news/detail/:id', array('controller' => 'news', 'action' => 'detail'));
// Code ist ungetestet
ChristianFischer
19.06.2007, 21:13
ich hab keine routing config datei. die einzigste route die ich habe ist die die ich oben gepostet habe.
Kann es vielleicht sein das es daran liegt das ich im indexcontroller in der indexaction folgendes mache :
public function indexAction()
{
$this->_forward('index','news');
}
ChristianFischer
20.06.2007, 10:15
keiner ne idee ?
ChristianFischer
20.06.2007, 16:35
bitte schaut in den anderen thread mit dem thema modulen :) -> close bitte
vBulletin® v3.6.12, Copyright ©2000-2010, Jelsoft Enterprises Ltd.