yii
(jammi )
October 18, 2010, 8:34pm
1
Hallo,
ich habe Probleme mit einigen rules und hoffe auf eure Hilfe.
Meine view sieht folgendermaßen aus
<?php echo CHtml::beginForm(array('translation/search'), 'get', array('name' => 'frm') ); ?>
<input type="text" name="value"/>
<select name="lang">
<option value="de">german</option>
<option value="en">english</option>
</select>
<input type="submit" value="<?php echo Yii::t('standard', 'search'); ?>" />
<?php echo CHtml::endForm(); ?>
Die passende Rule ist folgende
‘<lang:[a-zA-ZöäüÖÄÜß\-\+[:space:]]+>/<value:[a-zA-ZöäüÖÄÜß\-\+[:space:]]+>’ => ‘translation/search’,
Wenn ich aber auf Suche klicke, dann erscheint folgende URL
http://localhost/cneu/translation/search.html?value=waschmaschine&lang=de
Meine .htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
RewriteRule !.+ index.php [L]
Wer sieht mein Problem? dank für die Lösungen!
Y11
(Y!!)
October 18, 2010, 9:11pm
2
Guck mal in den Quelltext bezüglich "action" der Form. Alle Parameter (value, lang) werden da einfach drangehangen sobald du submit klickst. Woher soll die Form auch von deiner rule wissen?
Mit JavaScript könntest du vor dem submit die gewünschte Url bauen.
yii
(jammi )
October 18, 2010, 9:16pm
3
Guck mal in den Quelltext bezüglich "action" der Form. Alle Parameter (value, lang) werden da einfach drangehangen sobald du submit klickst. Woher soll die Form auch von deiner rule wissen?
Mit JavaScript könntest du vor dem submit die gewünschte Url bauen.
dafür ist doch die Rule da?!
‘<lang:[a-zA-ZöäüÖÄÜß\-\+[:space:]]+>/<value:[a-zA-ZöäüÖÄÜß\-\+[:space:]]+>’ => ‘translation/search’,
Wenn ich diesen Code submitte
<?php echo CHtml::beginForm(array('translation/search'), 'get', array('name' => 'frm') ); ?>
<input type="text" name="value"/>
<select name="lang">
dann rufe ich den Controller translation auf mit der Action search und übergebe die Parameter value und lang.
localhost/translation/search?value=wert&lang=de
müsste nach der Rule doch umgewandelt werden in
localhost/de/wert
Y11
(Y!!)
October 18, 2010, 9:29pm
4
Das
<?php echo CHtml::beginForm(array('translation/search'), 'get', array('name' => 'frm') ); ?>
hat die gewünschte Url ja noch nicht erstellt (die Angabe der Parameter fehlt ja noch). Beim Klick auf submit ist Yii garnicht mehr mit von der Partie (PHP-Script beendet). Wo soll da jetzt noch was generiert werden? Wie gesagt, die Parameter werden einfach hinten drangehangen.
Probier es mal direkt mit createUrl, das wird dir die gewünschte Url ausspucken.
mikl
(Mike)
October 19, 2010, 7:09am
5
Y!! hat recht, nur als Zusatz zum Verständnis weil ers noch nicht gesagt hat:
Diese URL erzeugt dein Browser! Das ist die Art und Weise wir Parameter bei Formularen mit Action GET übergeben werden.
yii
(jammi )
October 19, 2010, 5:48pm
6
ok danke für die Antworten.
Aber
Was wenn ich $this->redirect verwendet? Ich habe eine Methode in meinem Controller geschrieben die auf die entsprechende Methode ein redirect ausführt. Diese müsste doch nun die Regel umschreiben?
Meine View mit translation/search
<?php echo CHtml::beginForm(array('translation/search'), 'get', array('name' => 'frm') ); ?>
<center>
<input type="text" name="languages" value="english">
<input type="text" name="value"/>
<input type="submit" value="<?php echo Yii::t('standard', 'Übersetzen'); ?>" />
</center>
<?php echo CHtml::endForm();> ?>
Die ruft nun die Action search im Controller translation auf
public function actionSearch()
{
$sValue = trim(Yii::app()->request->getParam('value'));
$sLanguages = trim(Yii::app()->request->getParam('languages'));
// Pattern entscheiden welcher redirect stattfindet
$sPattern_alpha = "/^[a-zA-ZčćšđžČĆŠĐŽöäüÖÄÜß\-\_\+\.\:\;\,[:space:]]+$/";
// Satz oder Wort
if( preg_match ( $sPattern_alpha, $sValue ) )
{
$this->redirect(
array( "translation/phrase",
"value" => $sValue,
"languages" => $sLanguages
)
);
}
}
Diese ruft nun ein redirect auf und ruft die Action phrase im Controller translation auf!
Aber vorher müsste doch das Framework in meinen Rules nachgucken.
Sprich folgende Regel müsste doch Beachtung finden:
‘<languages:[a-zA-ZöäüÖÄÜß\-\+[:space:]]+>/<value:[a-zA-ZöäüÖÄÜß\-\+[:space:]]+>’ => ‘translation/phrase’,
und mir folgende URL erzeugen:
localhost/english/auto
Ich bekomme aber
http://localhost/translation/search.html?languages=english&value=auto