yii
(jammi )
1
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
Y11
(Y!!)
2
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?!
yii
(jammi )
3
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/
Y11
(Y!!)
4
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.
yii
(jammi )
5
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(
'' => '/',
Y11
(Y!!)
6
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.
yii
(jammi )
7
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
Y11
(Y!!)
8
Wenn du ein "/" haben willst müsste das eigentlich gehen:
<?php echo CHtml::link('Fehler melden', array("site/contact/number/{$number}"); ?>
yii
(jammi )
10
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;
}