Geçerli eylem URL almak ve sorgu parametreleri bir veya daha fazla değiştirmek için bir yardımcı Symfony'nin var mı?

4 Cevap php

Ne yapmak istiyorum rota ve sorgu dizesi parametreleri tümü ile birlikte mevcut eylem için yol almak, ve başka bir şey için tek bir sorgu dizesi parametresi değişimdir. Parametre geçerli istek ayarlanır ise, ben bunun değiştirilmesi isterim. Eğer değilse, ben ekledi isterim. Böyle bir şey için bir yardımcı var mı, ya da ben kendi yazmak gerekiyor?

Teşekkürler!

[Edit:] Dostum, ben aslında yapmak istediğinize belli oldu. Ben "Bu sayfa" için URL oluşturmak, ancak değişkenlerden birini değiştirmek istiyorum. Ben çıkıyorum sayfa diyor bir arama sonuçları sayfası düşünün "hiçbir sonuç, ancak bunlardan birini deneyin" bağlantıları bir grup izledi. Bağlantıları I başına bağlantı değiştirecek biri hariç tüm arama parametrelerini, içerecektir.

4 Cevap

Edit:

Tamam ben ne istediğinizi şimdi daha iyi bir fikrim var. Ben iyi yol olup olmadığını bilmiyorum ama (görünümünde) bu deneyebilirsiniz:

url_for('foo', 
        array_merge($sf_request->getParameterHolder()->getAll(), 
                    array('bar' => 'barz'))
)

Bu kullanırsanız çok sıklıkla url_for için bir sarıcı gibi çalışır, kendi yardımcısı oluşturmak için öneririz.

Sadece istek parametrelerin bir alt kümesini istiyorsanız ya, şunu yapın:

url_for('foo', 
         array_merge($sf_request->extractParameters(array('parameter1', 'parameter3')),
                     array('bar' => 'barz'))
)

(Ben daha iyi okunabilmesi için kodunu bu şekilde format)


Orijinal Cevap:

Eğer (? Denetleyicisi) Bir parametreyi değiştirmek istediğiniz yeri bilmiyorum, ama şimdiki sfRequest nesneye erişimi varsa, bunu yapmak gerekir:

$request->setParameter('key', 'value')

Size eylemini bu şekilde tanımlayarak ya tarafından istek nesnesini elde edebilirsiniz:

public function executeIndex($request) {
     // ...
}

ya da bu

public function executeIndex() {
     $request = $this->getRequest();
}

Symfony 1.4 için kullandım:

$current_uri = sfContext::getInstance()->getRouting()->getCurrentInternalUri();
$uri_params = $sf_request->getParameterHolder()->getAll();
$url = url_for($current_uri.'?'.http_build_query(array_merge($uri_params, array('page' => $page))));
echo link_to($page, $url);

Felix'in öneri iyidir, ancak sert çekirdek "Geçerli rota" gerektirir ediyorum ..

Sen kullanarak mevcut rotanın adını alabilirsiniz:

sfRouting::getInstance()->getCurrentRouteName()

ve sizin gibi bu kadar, url_for doğrudan bu takabilirsiniz:

url_for(sfRouting::getInstance()->getCurrentRouteName(), 
         array_merge($sf_request->extractParameters(array('parameter1', 'parameter3')),
                     array('bar' => 'barz'))
)

Umut olur.

Benim URL bazı karakterleri dönüştürmek gerekiyor çünkü Erq ve onun kod sayesinde daha aynı konsepti ile, ben, bazı küçük değişikliklerle aynı yaptık. Onun jenerik olsa ve kullanıcı aramak için seçtiği parametrelerini kaydetmek için, çoğu formları ile çalışması gerekir.

public function executeSaveFormQuery(sfWebRequest $request)
{
$sURLServer = "http://";
$sURLInternalUri = "";
$page = "";
$sURLInternalUri = sfContext::getInstance()->getRouting()->getCurrentInternalUri();
$suri_params = $request->getParameterHolder()->getAll();
$sParams = http_build_query(array_merge($suri_params));

$dpos = strpos($sURLInternalUri, "?");
$sURLConsulta[$dpos] = '/';
$sURL = substr($sURLInternalUri, $dpos);
$dpos = strpos($sURL, "=");
$sURL[$dpos] = '/';

$sURLFinal = $sURLServer . $sURL . '?' . $sParams;

//$this->redirect($this->module_name . '/new');
self::executeNew($request, $sURLFinal);
//echo "var_dump(sURLFinal): "; 
//var_dump($sURLFinal);
//echo "<br></br>";
//return sfView::NONE;
}

: Olarak executeNew olarak, hem kolay

public function executeNew(sfWebRequest $request, $sURLQuery)
{
//$sURLQuery= "http://";
if ($sURLQuery!= "")
{
    $this->form = new sfGuardQueryForm();
    //echo "var_dump(sURLQuery)";
    //var_dump($sURLQuery);
    //echo "<br></br>";

    $this->form->setDefault('surl', $sURLQuery);
}
else
{
            $this->form = new sfGuardQueryForm();
}
}