Скрыть сегменты URL, но хотите получить доступ к этим сегментам в методе контроллера в PHP Codeigniter - PullRequest
0 голосов
/ 09 июня 2018

Я хочу скрыть URL последних двух сегментов, но хочу получить доступ к этим скрытым сегментам в методе контроллера в PHP Codeigniter.Это то, что у меня есть в настоящее время* Но я хочу получить доступ к этим двум значениям скрытого сегмента в методе контроллера

как

$this->uri->segment('3');
$this->uri->segment('4');

Как я могу это сделать ...

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Я предлагаю вам сделать динамическую маршрутизацию для каждого субтитра в маршрутизации вашего CI.Для этого откройте ваш route.php (application / config / rout.php) и напишите следующий код: -

require_once( BASEPATH .'database/DB.php' );

$db =& DB();
$query = $db->get('subtitles');   // select the table which have the data and url slug
$result = $query->result();
foreach($result as $r) { 

    $route['subtitles/'.$r->url_slug] = "subtitles_controller/{$r->url_slug}/{$r->id1}/{$r->id2}";  
 }

// Подсказка для приведенного выше кода: -

Вы также можете маршрутизировать даже без имени контроллера в начале (без "субтитров").Для этого вы можете удалить субтитры с начала маршрутизации.

eg: $route[$r->url_slug] = "subtitles/{$r->url_slug}/{$r->id1}/{$r->id2}";

теперь на субтитрах вашего контроллера

function subtitles_controller($slug,$id1,$id2)
     // here you can access the variables 
}
0 голосов
/ 09 июня 2018

URL не предоставляют никаких функций для отправки «скрытых» данных.Поэтому вы не можете скрыть значения в вашем URL.

Однако вы можете использовать контроллер среднего класса, который перенаправляет пользователя еще один раз:

1. Пользователь делает запрос на/subtitles/xy/1/2 На запрос отвечает следующая функция:

public function middleware(){
  $this->load->library('session');
  //Local variables just for easier understanding
  $seg2 = $this->uri->segment('2');
  $seg3 = $this->uri->segment('3');
  $seg4 = $this->uri->segment('4');

  //Store the data in a session
  $this->session->set_userdata('seg3', $seg3);
  $this->session->set_userdata('seg4', $seg4);
  redirect('subtitles/'.$seg2);
}

2. Codeigniter устанавливает переменные сеанса и перенаправляет пользователя на другую функцию, которая получает значения

public function handleSubtitles(){
  $this->load->library('session');
  //Retrieve the values from the session library 
  $seg3 = $this->session->userdata('seg3');
  $seg4 = $this->session->userdata('seg4');
  //Unset the values 
  $this->session->unset_userdata('seg3');
  $this->session->unset_userdata('seg4');}
} 

Для того, чтобы это работало, вам также нужно настроить конфигурацию маршрутизации: application/config/routes.php

$route['subtitles/(:any)'] = "subtitles/handleSubtitles";
$route['subtitles/(:any)/(:any)/(:any)'] = "subtitles/middleware";

Однако я бы просто оставил значения в URL-адресе ... Это сделает вашработать легче в долгосрочной перспективе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...