2015-06-02 5 views
0

У меня есть SEO URL, какCakePHP разбора URI и получить идентификатор

lieferservice-pizzeria-da-persio-26-offenbach 

в моем загрузочном файле Я пытаюсь Pase этот URL и получить идентификатор магазина, который находится в это 26

Затем я могу прочитать базу данных, чтобы получить информацию о магазине. Каким будет лучший способ сделать это. не имеют ни малейшего представления о.

ответ

0

это то, что маршруты для. вы можете параматизировать любую часть URL-адреса и получать доступ к нему в запросе. В вашем случае я думаю, что вы хотите объединить какой-то пул с id, разделенным тире. это кусок пирога.

Router::connect('/:slug-:id', array('controller' => 'yourController', 'action' => 'yourAction'), array('id' => '[0-9]+','slug' => '[a-zA-z-]+')); 

//inside your action 
$id = $this->request->params['id']; 
$slug = $this->request->params['slug']; 

не урожденной для регулярных выражений :)

0

Лучшее решение

$str = 'lieferservice-pizzeria-da-persio-26-offenbach'; 
$int = intval(preg_replace('/[^0-9]+/', '', $str), 10); 
var_dump($int); 

Его возвращают только int 26

1

Предлагаемое решение просто удаляет все не цифры, так что вы в конечном итоге только с цифрами. Это работает, если вы можете убедиться, что у вас никогда не будет цифры в строке, кроме строки. Итак, с строкой типа «lieferservice-pizzeria12-da-24-persio-26-offenbach» вы получите 122426 вместо 26, которые хотели.

Если вы хотите, чтобы убедиться, что вы только принять -somedigit-, как идентификатор следует использовать:

preg_match("/-([0-9]+)-/", $input_line, $output_array); 

вместо этого.

То, что это на самом деле делает очень просто:

Он просто ищет первую строку, начиная с «-», а затем эксклюзив! цифр и заканчивается на «-», чем возвращает целую строку в $ output_array [0] (в вашем примере -26-) и цифру (материал внутри скобок) в $ output_array [1], что в вашем случае равно 26.

0

Если у вас есть функция в контроллере, давайте называть его

public function getUrl(){ 

} 

Первый мозговым это сделать CakePHP принять тип URL вы передаете (специальные символы, такие как «-»). В вашем пути вы можете иметь это:

Router::connect('/getUrl/:id', array('controller' => 'yourControllerName', 'action' => 'getUrl'), array('id' => '[0-9A-Za-z= -]+')); 

Теперь, если вы передаете ваш URL, как

www.domain.com/getUrl/lieferservice-pizzeria-da-persio-26-offenbach 

Затем обратно в функции

public function getUrl(){ 
    $getValueFromUrl = $this->params['id']; 
    // Use PHP explode function to get 26 out of $getValueFromUrl 

} 
Смежные вопросы