Yii Framework Forum: redirect() - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

redirect() redirect und SEO-freundliche URL's Rate Topic: -----

#1 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 20 October 2009 - 08:52 AM

Laut http://www.yiiframew...redirect-detail

Ich möchte meinem Redirect auch eine Variable übergeben, jedoch steht in der Doku, dass nur Controller & Action übergeben werden kann.
Redirects the browser to the specified URL or route (controller/action).


Gibt es eine andere Methode controller/action/parameter???


Weiter heißt es
the URL to be redirected to. If the parameter is an array, the first element must be a route to a controller action and the rest are GET parameters in name-value pairs.


Ok, gelesen und getan

$this->redirect(array('controller/action', '2'));

erzeugt mir
http://localhost/blog2/controller/action/0/2


-------------------------------------------------------------------------
$this->redirect(array('controller/action', 'value' => '2'));

erzeugt mir
http://localhost/blog2/controller/action/value/2


-------------------------------------------------------------------------

Aber ich will das hier
http://localhost/blog2/controller/action/2


mfg
yii
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#2 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,013
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 20 October 2009 - 09:49 AM

Standardmäßig werden Variablen bei urlFormat=path immer als name/wert an die URL gehängt. Damit die URLs so generiert werden, wie du das möchtest, musst du eine URL-Regel im UrlManager konfigurieren. Dann wird die URL in deinem letzten redirect()-Aufruf richtig erzeugt.
0

#3 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 20 October 2009 - 11:56 AM

habe ich soweit ja gemacht

'urlManager'=>array(
	'urlFormat'		=> 'path',
	'caseSensitive'		=> true,
	'showScriptName'	=> false,
	'urlFormat'		=> 'path',
	'useStrictParsing'	=> true,
	'rules'=>array(
		'controller/action/value/<value:[0-9]+>' => 'engine/search',       <<<< funktioniert   *
		'controller/action/<value:[0-9]+>' => 'engine/search',       <<<< funktioniert nicht   **
	),


*)
$this->redirect(array('controller/action', 'value' => '2'));

**)
$this->redirect(array('controller/action', '2'));
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#4 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,013
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 20 October 2009 - 12:55 PM

Du musst die URL in beiden Fällen so generieren:

$this->redirect(array('controller/action', 'value' => '2'));

0

#5 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 20 October 2009 - 03:40 PM

View PostMike, on 20 October 2009 - 12:55 PM, said:

Du musst die URL in beiden Fällen so generieren:

$this->redirect(array('controller/action', 'value' => '2'));




aber das erzeugt ständig
http://localhost/blog2/controller/action/value/2

Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#6 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 20 October 2009 - 03:49 PM

Fehler gefunden, man muss das so schreiben:

$this->redirect(array("controller/action/{$variable}"));
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#7 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,013
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 20 October 2009 - 04:03 PM

Das solltest du nicht machen. So musst du jedesmal überall alles anpassen, wenn du dein URL-Schema mal ändern willst. Genau das nimmt dir der UrlManager ja ab.

Mit dieser Konfiguration muss es klappen:

'urlManager'=>array(
        'urlFormat'             => 'path',
        'caseSensitive'         => true,
        'showScriptName'        => false,
        'urlFormat'             => 'path',
        'useStrictParsing'      => true,
        'rules'=>array(
                // nur eine Regel:
                'controller/action/<value:[0-9]+>' => 'engine/search',      
        ),


Ein Aufruf mit createUrl (wird intern auch von redirect() verwendet):
echo $this->createUrl('engine/search',array('value'=>123));

liefert bei mir:
http://localhost/controller/action/123

0

#8 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 20 October 2009 - 04:16 PM

View PostMike, on 20 October 2009 - 04:03 PM, said:

Ein Aufruf mit createUrl (wird intern auch von redirect() verwendet):
echo $this->createUrl('engine/search',array('value'=>123));

liefert bei mir:
http://localhost/controller/action/123



hier ist mein Probel, denn das liefert mir

http://localhost/blog2/controller/action/value/123


das value kommt einfach drin vor
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#9 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,013
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 20 October 2009 - 04:23 PM

Die Regel wird nur für die angegebene Route verwendet. Hast du auch 'engine/search' als Parameter verwendet oder 'controller/action'?
0

#10 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 20 October 2009 - 04:27 PM

ich könnte mich grad selbst aufessen..........
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#11 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,013
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 20 October 2009 - 04:29 PM

;D

Hab das Klick bis hier gehört... ;)
0

#12 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 20 October 2009 - 04:32 PM

Danke bis hierhin schonmal ;D ;D ;D
Manchmal ist man einfach blind


Mal noch eine Frage zum Abschluss
Nehmen wir an, ich würde gerne meine Seite internationalisieren wollen. (deutsch, englisch, französich, etc.)

Mein URLManager würde nun wie folgt aussehen

'urlManager'=>array(
        'urlFormat'             => 'path',
        'caseSensitive'         => true,
        'showScriptName'        => false,
        'urlFormat'             => 'path',
        'useStrictParsing'      => true,
        'rules'=>array(
                'maschine/suchen/<value:[0-9]+>' => 'engine/search',
                'machine/search/<value:[0-9]+>' => 'engine/search',
                'leMachine/leSuchen/<value:[0-9]+>' => 'engine/search',
        ),


Wie könnte ich jetzt "sprachabhängig", die URL's aufrufen?

Sprich der User benutzt die englische Sprache und bekommt dadurch

http://localhost/blo...chine/search/12 ???ß
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#13 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,013
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 21 October 2009 - 02:44 AM

Dazu gibts noch keine so richtige Lösung innerhalb von Yii. Aber man hat ja an der Stelle alle Möglichkeiten von PHP, muss sich also selbst eine kleine Logik einfallen lassen. Bedenke allerdings, dass zum Zeitpunkt wenn main.php gelesen wird, Yii::app() noch nicht initialisiert wurde, du also noch nicht darauf zugreifen kannst um z.B. das locale auszulesen.
0

#14 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 21 October 2009 - 04:05 AM

Das würde mich für eine Internationalisierung meiner Seite interessieren.
Wo kann ich denn erfahren wie dort der Stand der Dinge ist, bzw. ob das überhaupt geplant ist?
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#15 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,013
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 21 October 2009 - 04:19 AM

Geplant ist hier soweit ich weiß noch nichts. Aber du kannst ja mal im englischen Bereich fragen, evtl. hat da schon jemand eine Lösung.
0

#16 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 21 October 2009 - 04:21 AM

Ja ok
Das Yii-Framework gefällt mir soweit sehr gut, ich habe es ausgesucht, da es unter anderem damit geworben hat, dass es "internationalisierungsfähig" ist. Ich hoffe das jemand das gleiche Problem wie ich schon hatte ;)
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#17 User is offline   Y!! 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 978
  • Joined: 18-June 09

Posted 21 October 2009 - 11:34 AM

Also multilanguage-url's habe ich mit einem einfachen Component gelöst. Das wird über preload in der config vorgeladen, erkennt anhand von z.B. cookie oder country-code die gewünschte Sprache und bindet dann die dazugehörigen url-rules ein (z.B. ../i18n/urlRules/de.php). Diese rules müssen dann an den urlManager übergeben werden.

Yii::app()->urlManager->rules = $newRules;
Yii::app()->urlManager->init();

0

#18 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 21 October 2009 - 11:36 AM

..
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#19 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 21 October 2009 - 11:36 AM

Das hört sich sehr interessant an, könntest du das vielleicht etwas genauer erläutern? Beispielcode etc.?
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#20 User is offline   Y!! 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 978
  • Joined: 18-June 09

Posted 21 October 2009 - 12:06 PM

Habe den Code gerade nicht hier, aber so in etwa sieht das aus:

<?php

class I18n extends CComponent
{

  // Die unterstützten Sprachen (language-codes). Diese Variable sollte am Besten über die config
  // gesetzt werden.
  public $supportedLanguages = array('de', 'en');

  public function init()
  {

    // Hier muss der language-code "erkannt" werden. Zum Beispiel über Cookie, GeoIp-CountryCode
    // oder den Http-Request-Header. Natürlich muss auch überprüft werden ob der languagce-code
    // unterstützt wird ($this->supportedLanguages ...). Zu Testzwecken halt einfach mal auf
    // "de" setzen
    $languageCode = 'de';

    // Hier holen wir die url-rules ...
    $rules = include(Yii::app()->basePath . "/i18n/urlRules/{$languageCode}.php");

    // ... und übergeben sie an den urlManager
    Yii::app()->urlManager->rules = $rules;

    // ... der dann nochmal neu geladen wird und die "neuen" rules übernimmt
    Yii::app()->urlManager->init();

  }

}

?>


Dann in der config:


...

preload => array('log', 'i18n'),

...



In der eigentlichen Config sollte dann auch keine Rule stehen. Die rules kommen in den urlRules-Ordner:


// de.php

return array(
  
  'kontakt' => 'site/contact',

);




// en.php

return array(
  
  'contact' => 'site/contact',

);



Ich denke das sollte dir einen Eindruck verschaffen. Den Code hier habe ich jetzt nicht getestet, kann also sein das Fehler drin sind. :D
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users