Yii Framework Forum: [ERLEDIGT] - Unvollständige URL behandeln. - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[ERLEDIGT] - Unvollständige URL behandeln. Rate Topic: -----

#1 User is offline   yii 

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

Posted 08 October 2009 - 08:43 AM

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
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#2 User is offline   Y!! 

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

Posted 08 October 2009 - 10:07 AM

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?!
0

#3 User is offline   yii 

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

Posted 08 October 2009 - 10:29 AM

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/

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

#4 User is offline   Y!! 

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

Posted 08 October 2009 - 10:59 AM

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.
0

#5 User is offline   yii 

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

Posted 08 October 2009 - 05:32 PM

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(
	''	=> '/',

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

#6 User is offline   Y!! 

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

Posted 09 October 2009 - 12:41 AM

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.
0

#7 User is offline   yii 

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

Posted 09 October 2009 - 03:26 AM

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

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

#8 User is offline   Y!! 

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

Posted 09 October 2009 - 05:21 AM

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

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

0

#9 User is offline   yii 

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

Posted 09 October 2009 - 08:03 AM

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

#10 User is offline   yii 

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

Posted 09 October 2009 - 06:16 PM

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/blo...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;
}

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

Share this topic:


Page 1 of 1
  • 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