Perder segmentos URI ao pagar com CodeIgniter
-
26-09-2019 - |
Pergunta
Eu tenho uma interface A /Payments, onde o usuário deve ser capaz de filtrar por meio de faixa de preço, banco e outras coisas. Esses filtros são caixas de seleção padrão. Quando envio o formulário de filtro, todos os dados da postagem vão para outro método chamado pagamentos/pesquisa. Esse método executa a validação, salva os valores de postagem em uma sessão flashdata e redireciona o usuário de volta para /pagamentos que passam o nome flashdata via URL.
Portanto, meus links de paginação padrão sem filtros são exatamente assim:
payments/index/20/
payments/index/40/
payments/index/60/
E se você enviar o formulário de filtro, o URL de retorno é:
payments/index/0/b48c7cbd5489129a337b0a24f830fd93
Isso funciona muito bem. Se eu mudar o zero para outra coisa, ele pagina muito bem. A única questão, no entanto, é que os links de página << 1 2 3 4 >> não manterão o hash após o deslocamento da paginação. O CodeIgniter está gerando os links da página ignorando esse segmento URI adicional.
Minha configuração URI_SEGEMEGEN já está definida como 3:
$config['uri_segment'] = 3;
Não posso definir Uri_segment como 4 porque isso pode ou não existir. Alguma idéia de como posso resolver isso? É obrigatório que o IC tenha o deslocamento como o último segmento no URI? Talvez eu esteja tentando uma abordagem incorreta, então sou todos ouvidos.
Obrigado pessoal.
EDIT: Por que estou passando pelo nome flashdata via Uri, você pode perguntar? Porque permite que o usuário abra várias guias do navegador e faça pesquisas diferentes em cada guia. Para cada filtragem que você faz, um novo flashdata var é gerado.
Solução
Apenas para usuários vindos do Google, aqui está a solução:
Na matriz de configuração da paginação, mudei minha base_url para isso:
$config['base_url'] = site_url('payments/index/' . $this->uri->segment(3) . '/' . $this->uri->segment(4));
Onde o segmento (3) é o meu número de deslocamento e segmento (4) é o hash. Portanto, neste caso, o hash pode ou não existir e a paginação ainda funcionará.
Outra abordagem pode ser a seguinte: se você for para pagamentos e não há ID de dados flash no URL, redireciona o usuário para pagamentos/pesquisa e cria uma matriz vazia com filtros vazios. Em seguida, ele redireciona de volta aos pagamentos/_new_flashdata_id_here_. Dessa forma, o URL sempre terá um ID de dados flash no URL e você poderá compensar a paginação no último segmento URI, como de costume.
Outras dicas
Por que não definir o hash como um item de sessão?
$this->session->set_userdata('session_flashdata_hash', $hash);
O hash estará disponível até que você o desative
$this->session->unset_userdata('session_flashdata_hash');
Ou até você destruir a sessão.
$this->session->sess_destroy();
Por que você não está checando para ver se o hash existe e define o uri_segment
baseado nisso?