URL görünümü yardımcısında kodlanmış URL parametreleri ile sorun

2 Cevap php

Yani benim sorunum aynı kod doğru çevrimiçi% 100 çalışıyor, ben (Loki ile benim PC'de) uygulama çevrimdışı test ederken sadece oluşur, biraz garip.

İşte helper (sadece örnek) kullanmak nasıl:

<a href="<?php

echo $this->url(array('module' => 'admin',
                      'controller' => 'index',
                      'action' => 'approve-photo',
                      'id' => $this->escape($a->id),
                      'ret' => urlencode('admin/index/photos')),
                null,
                true);

                            ?>" class="blue">approve</a>

Online, bu linki harika çalışıyor, bu benzer eylem gider:

public function approvePhotoAction()
{
    $request = $this->getRequest();
    $photos = $this->_getTable('Photos');

    $dbTrans = false;

    try {

        $db = $this->_getDb();
        $dbTrans = $db->beginTransaction();

        $photos->edit($request->getParam('id'),
                      array('status' => 'approved'));

        $db->commit();

    } catch (Exception $e) {
        if (true === $dbTrans) {
            $db->rollBack();
        }
    }

    $this->_redirect(urldecode($request->getParam('ret')));
}

Bu yüzden online, bu fotoğraf onaylar ve geri URL "ret" param ("admin / index / resimler") olarak kodlanmış bir URL'ye yönlendirir.

Ama offline WAMPServer ile ben linke tıklayın ve bunun gibi 404 hatası alıyorum:

Not Found

The requested URL /public/admin/index/approve-photo/id/1/ret/admin/index/photos was not found on this server.

Ne oluyor?

Ben WAMPServer en son sürümünü (Loki 2.0i [11/07/09]) kullanıyorum. Her şey çalışıyor.

. İşte benim htaccess dosyası sadece durumda olduğunu:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

# Turn off magic quotes
#php_flag magic_quotes_gpc off

Benim yerel PC'de ZF projelerini test etmek için sanal konaklar kullanıyorsanız ediyorum. İşte sanal konaklar eklemek nasıl.

httpd.conf:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName myproject
    DocumentRoot "C:\wamp\www\myproject"
</VirtualHost>

hosts dosyası:

127.0.0.1    myproject

Bu benim localhost bir kabus ve neredeyse imkansız bir görev üzerinde test ve hata ayıklama yapar, projeler, çünkü herhangi bir yardım mutluluk duyacağız. Ben çalışıp çalışmadığını kontrol etmek her şeyi online yüklemek zorunda: (

GÜNCELLEME:

(ZF yardımcısında inşa) _redirect yardımcısı kaynak kodu:

/**
 * Set redirect in response object
 *
 * @return void
 */
protected function _redirect($url)
{
    if ($this->getUseAbsoluteUri() && !preg_match('#^(https?|ftp)://#', $url)) {
        $host  = (isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:'');
        $proto = (isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=="off") ? 'https' : 'http';
        $port  = (isset($_SERVER['SERVER_PORT'])?$_SERVER['SERVER_PORT']:80);
        $uri   = $proto . '://' . $host;
        if ((('http' == $proto) && (80 != $port)) || (('https' == $proto) && (443 != $port))) {
            $uri .= ':' . $port;
        }
        $url = $uri . '/' . ltrim($url, '/');
    }
    $this->_redirectUrl = $url;
    $this->getResponse()->setRedirect($url, $this->getCode());
}

GÜNCELLEME 2:

Yardımcı çevrimdışı Çıktı:

/admin/index/approve-photo/id/1/ret/admin%252Findex%252Fphotos

Ve online (aynı):

/admin/index/approve-photo/id/1/ret/admin%252Findex%252Fphotos

GÜNCELLEME 3:

Tamam. Sorun sanal konak yapılandırması ile aslında. Belge kök C kuruldu: \ wamp \ www \ myproject yerine C: \ wamp \ www \ Projem kamu \.

Ve ben ortak klasöre yönlendirmek için bu htaccess kullanıyordu:

RewriteEngine On

php_value upload_max_filesize 15M
php_value post_max_size 15M
php_value max_execution_time 200
php_value max_input_time 200
# Exclude some directories from URI rewriting
#RewriteRule ^(dir1|dir2|dir3) - [L]

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

Ben bu konuda unuttum neden bilmiyorum kahretsin, ben, ben bu konuda% 100 emin olduğunu, sanal konak ortak klasöre doğru yapılandırılmış olduğunu düşündüm ben de çifte kontrol ettim ve ben kör am hiçbir sorun (wtf? Gördü? .)

2 Cevap

  1. check your php.ini
    php_flag magic_quotes_gpc off Must be Off at online and local servers

  2. url yardımcı Dördüncü parametre $encode = true vardır ve true, varsayılan olarak, çünkü urlencode 'ret' => urlencode('admin/index/photos')) kullanmayın

  3. Bize çıkışını $this->url(array('module' => 'admin'..... sunucuda ve localhost göstermek

Ben evde wamp kullanıyorum ve çekicilik gibi çalışır

UPDATE 1
try $this->_redirect( '/'. ltrim(urldecode($request->getParam('ret')), '/') );

GÜNCELLEME 2;

ViewScript

    <a href="<?php

echo $this->url(array('module' => 'default',
                  'controller' => 'index',
                  'action' => 'test-encoded-redirect',
                  'ret' => urlencode('default/static/faq')),
            null,
            true);

                        ?>">test me</a>


	<?php
	class IndexController extends Smapp_Controller_Action 
	{   

		public function testEncodedRedirectAction()
		{

                            // ddump($this->_getAllParams());
			// ddump output 
			// Array ( 
			// 	[controller] => index 
			//	[action] => test-encoded-redirect 
			//	[ret] => default%2Fstatic%2Ffaq 
			//	[module] => default 
			// )


			$ret = '/' . ltrim(urldecode($this->_getParam('ret')), '/');
			// echo $ret;
			// output: /default/static/faq

			$this->_redirect($ret);
		}
	}

bu işe yarıyor!

Sadece hat # 744 Açık ve Kapalı, hem çalıştı / etc / php.ini.default içinde

magic_quotes_gpc = On

Sonra yeniden başlatır iki yönde koştu: sudo apachectl -k restart

urlencoded dizeleri hala çalışmıyor. Serseri.