Kurulum temizleyici bağlantıları gerekiyor - Şu anda çok uzun linkler - Zend framework

3 Cevap php

Benim proje için zend framework kullanarak kulüpler - Ben temiz bağlantıları kullanarak kurmak için denedim - ancak benim bağlantılar gerçekten uzun ve merak almak gibi görünüyor fark ettik bu noktada birleştirmek için bir yol olurdu nerede kullanıcı küçük bağlantıları olabilir bir yapı.

İşte bir örnek benim web sitesi bir id parametresi alan bir kişinin eylemi olan bir dizin denetleyicisi vardır - böylece daha sonra bir certin id bir kişiyi görmek için bir link gibi görünüyor:

www.mywebsite.com/directory/person/id/1809

Tamam görünüyor ama samimi bağlantıları daha okunabilir ve arama motoru yapmak için şimdi çalışıyorum - ben gibi bir şey istiyorum - kullanıcı kimliği 1809 John Smith adlı varsayarak:

www.mywebsite.com/directory/person/John-Smith-1809

Aşağıdaki gibi gerçekten temel bir şey daha iyi olacaktır:

www.mywebsite.com/John-Smith-1809

Ben bir denetleyicisi veya eylemi söz olmadan yönetmek nasıl bilmiyorum rağmen ... herhangi bir fikir adamlar gerçekten yardımcı olacaktır ...

3 Cevap

ZF Manual on how to use Routes bakabilirsiniz.

Temel olarak, o iş yapmak için böyle bir şey gerekiyor:

$route = new Zend_Controller_Router_Route_Regex(
    '(.+)-(\d+)',
    array(
        'controller' => 'directory',
        'action'     => 'person'
    ),
    array(
        1 => 'name',
        2 => 'id'
    ),
    '%s-%d'
);
$router->addRoute('directoryPerson', $route);

Note: don't expect this to run out of the box. You will likely have to modify it. Should get you into the right direction though.

Bir önceki cevabı dediğim gibi bir Regex rota kullanabilirsiniz, ancak yeni başlayanlar için muhtemelen gibi görünüyor "normal" bir rota kullanmak daha kolay olacaktır:

http://yoursite.com/1234/John-Smith/

Lütfen bootstrap yapmanız ediyorum:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();

$router->addRoute('user', new Zend_Controller_Router_Route(
    ':user-id/:user-name/',
    array(
        'module' => 'user',
        'controller' => 'user',
        'action' => 'read'
    )
));

Bu form / user-id/user-name sahip yönlendirici "kullanıcı" olarak adlandırılan bir rota, ekler, bu nedenle / 1234/John-Smith /. Bir kullanıcı modülünde bir usercontroller için bakmak ve okuma eylemi gidecek. Sen ders değişimin başka bir modül / denetleyici / eylem istediğiniz eğer ki.

Daha sonra User_UserController Kullanıcı modülünde, bir readAction () olduğunu olurdu; Bu eylem sizinle id alabilir:

$userId = $this->_getParam('user-id');

Benzer şekilde, size adını almak olabilir, o gerekir.

$userName = $this->_getParam('user-name');

Bir görünüm komut Eğer ile bu rota bir url oluşturmak olabilir:

<?php echo $this->url(array('user-id' => 1234, 'user-name' => 'John Smith'), 'user', true); ?>

Daha önce tanımlanan "kullanıcı" rota kullanmak için yönlendirici söyler 'kullanıcı' parametresini, unutmayın.

Sen URL yeniden yazmak için apache modül mod_rewrite kullanabilirsiniz

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteCond ###blah blah blah###
  RewriteRule ###blah blah blah###

</IfModule>