CakePHP Router :: connect () takma adlar?

2 Cevap php

Bu routes.php URL takma adları var CakePKP'deki mümkün mü? Ya da başka hangi yollarla şey eşdeğeri elde edebilirsiniz:

Bazı paginated manzarasına sahip olduğunuzu varsayalım. Mümkün sıralamalar arasında basit bir URL'ye bağlamak istediğiniz belli olanlar vardır. Örneğin:

Nasıl bir Router parametreleri eklerim :: connect ()? Sahte kod:

Router::connect('/'.__('headlines',true),
        array(
        'controller' => 'posts',
        'action' => 'listView'
        'params' => 'page:1/sort:Post.created/direction:desc',
        )
);

2 Cevap

Router Kontrolörleri, Eylemler ve params içine bir URL "çevirir" dikkat edin, diğer URL'ler için değil "ileri" URL'ler yapar. Gibi, bu gibi yazmak:

Router::connect('/headlines',
    array(
        'controller' => 'posts',
        'action' => 'listView'
        'page' => 1,
        'sort' => 'Post.created',
        'direction' => 'desc'
    )
);

Ben app yeterince şey çevirmek için bu noktada kurmak değildir beri '/'.__('headlines', true), işe yarayacağını sanmıyorum, bu yüzden sadece her zaman geri varsayılan dilde kelime olsun istiyorum. Ayrıca, bu noktadan sonra artık __() locks dilinin ilk kullanımı dilini değiştirmek olamazdı.

Sen explictly tüm URL'leri bağlamak gerekir. Bazı yazarak kaydetmek için, bunu yapabilirsiniz:

$headlines = array('en' => 'headlines', 'de' => 'schlagzeilen', ...);
foreach ($headlines as $lang => $headline) {
    Router::connect("/$headline", array('controller' => ..., 'lang' => $lang));
}

Yani should zaten URL kullanmak $this->param['named']['lang'] değişkeni, yaratacaktır.

Evet, bu mümkün değildir ... bootstrap.php yükler yollarının çok önce orada bir şey gibi ayarlarsanız:

session_start();
if(isset($_SESSION['lng'])){
    Configure::write('Config.language', $_SESSION['lng']);
}

... Ve beforeFilter sizin app denetleyicisi:

$language = 'xy';
Configure::write('Config.language', $language);
$_SESSION['lng'] = $language;

Yani başlangıç ​​sayfası xy.site.com veya www.site.com / xy tercih ne olursa olsun yönlendirme, dile sor vermekteyiz. Ve sayfa bağlantıları ve set $language değişecek Şimdi ikinci işlemek $_SESSION['lang'] ...

Tüm yönlendirici bağlantılar gibi:

Router::connect(__('/:gender/search/:looking_for/*'), array('controller' => 'users', 'action' => 'search'));

olacaktır:

Router::connect(__('/:gender/trazi/:looking_for/*'), array('controller' => 'users', 'action' => 'search'));

veya:

Router::connect(__('/:gender/suche/:looking_for/*'), array('controller' => 'users', 'action' => 'search'));

% 100 test, CakePHP 2.2 çalışır. Eğer bootstrap kendisi baska / dil url ayrıştırıcı koyarsanız daha da gelişme mümkün ...