[ERLEDIGT] - Unvollständige URL behandeln.

Hallo,

wie behandelt ihr am saubersten unvollständige URLs?

Vollständige URL


http://localhost/blog2/index.php/site/contact/number/200

Unvollständige URL


http://localhost/blog2/index.php/site/contact/number/

Bei der unvollständigen URL würde ich gerne eine Weiterleitung an


http://localhost/blog2/index.php/404

erstellen oder ähnliches.

mfg & thx

Wie sehen denn deine Rules aus?


http://localhost/blog2/index.php/site/contact/number/

Diese URL müsste bei korrekt definierter Rule doch eigentlich schon einen Error 404 anzeigen?!

Die Seite rufe ich folgendermaßen auf


<b><?php echo CHtml::link('Fehler melden', array('site/contact', 'number' => $number)); ?></b>

Rules habe ich noch keine definiert.

Wird die Seite so aufgerufen, lande ich ständig auf meiner Startseite


http://localhost/blog2/index.php/site/contact/number/

Hmm, also ohne direkt definierte Rules habe ich noch nicht gearbeitet. Ich würde mal empfehlen folgende urlManager settings zu nehmen:




...


'components' => array(

  'urlManager' => array(

    'caseSensitive' => true,

    'showScriptName' => false,

    'urlFormat' => 'path',

    'useStrictParsing' => true,

    'rules' => array(

      'contact' => 'site/contact',

      'contact/<number:[0-9]+>' => 'site/contact/number/<number>',

    ),

  ),

),


...



Eine .htaccess musst du dann noch im selben Ordner in der auch die index.php liegt anlegen:




RewriteEngine on


RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php [L]


RewriteRule !.+ index.php [L]



Das sollte nun funktionieren: http://localhost/contact/200

Alles andere (also keine Zahl hinter "/contact/") sollte einen 404 ausspucken.

Ich weiss gerade nich ob deine CHtml::link funktion dann noch wie gewohnt funktioniert - kannst ja mal versuchen.

Das funktioniert soweit, jedoch kann ich grad meine Startseite nicht aufrufen! :(

http://localhost/blog2/

folgenden Eintrag habe ich hinzugefügt, mit dem es geht, jedoch sieht dieser nicht so "schön" aus.


'rules'=>array(

	''	=> '/',

Ja also jede Rule musst du mit den oben genannten urlManager settings explizit angeben.

Die Startseite müsste dann folgende Rule haben:




'rules' => array(

  '' => 'controller/action',



Wenn dein Standard-Controller "Site" ist und deine Standard-Action "Index", dann machst du:




'rules' => array(

  '' => 'site/index',



Ich kann nur empfehlen das so zu machen (also alle Rules explizit anzugeben) da es einfach sauberer ist.

Meine rule habe ich so übernommen wie du sie mir gepostet hast


'rules'=>array(

	''				=> '/',

	'contact'		=>	'site/contact',

	'contact/site/<number:[0-9]+>'	=> 'site/contact/number/<number>',	

Verweisen tue ich auf die Rule wie folgt


<?php echo CHtml::link('Fehler melden', array('site/contact', 'number' => $number)); ?>

Heraus kommt jedoch zwischen "contact" und "number" ein ? statt einem /


http://localhost/blog2/contact?number=520

Wenn du ein "/" haben willst müsste das eigentlich gehen:


<?php echo CHtml::link('Fehler melden', array("site/contact/number/{$number}"); ?>

funktioniert wunderbar.

THX!!!

eine kleine Frage habe ich noch, die ich mir nicht nur an dieser Stelle bisher gestellt habe.

Mittels


<?php echo CHtml::link('Fehler melden', array("site/contact/number/{$number}"); ?>

übergebe ich meinen Integer - Parameter an meine neue Seite (http://localhost/blog2/contact/wrongNumber/520).

Den Parameter hole ich folgendermaßen aus der URL (in der VIEW)


<?php $number = intval($_GET['number']); ?>

Wie kann ich im Controller, auf den Parameter zugreifen?

Ausgeschlossen von dieser unsicheren Art




public function actionWrongNumber()

{

	$contact=new ContactForm;

	<?php $number = intval($_GET['number']); ?>

}



So in der Art?!




public function actionWrongNumber()

{

	$contact=new ContactForm;

	$contact->number;

}