Recuperar parametro por URL Amigavel

Galera, me da um help ai…

Estou trabalhando em um CRUD simplesinho… Mas me deparei com a seguinte situação:

Na Pagina em que listo os clientes, ao lado de cada cliente tenho um botão “DELETE” que, quando clicado, manda pra URL “/clientes/delete”… com o ID do sujeito. So que na funcao do meu controller onde faço isso, nao consigo recuperar de forma alguma o ID que passei pra URL…
Alguem me salva ai :slight_smile:

Nossa, acho que é muito inseguro passar algo para deletar por url, melhor você passar por POST e recuperar com:

if(isset($_POST["nomedocampoquepodeserhidden"]))
{
  $variavel = $_POST["nomedocampoquepodeserhidden"];
}
1 curtida

Eu diria que o mais correto ainda seria a URL não conter ações ou verbos:

DELETE https://meusistema.com/clientes/ID_DO_CLIENTE

Esse DELETE seria o método HTTP.

1 curtida

em primeiro lugar precisa estar com o seu servidor devidamente configurado.

no apache o mod_rewrite habilitado e o .htaccess configurado adequadamente.

em seguida você pode pegar o terceiro segmento do REQUEST_URI através da seguinte função:

function segment($segmentId=null){
    $str=$_SERVER["REQUEST_URI"];
    $str=@explode('?',$str)[0];
    $arr=explode('/',$str);
    $arr=array_filter($arr);
    $arr=array_values($arr);
    if(count($arr)<1){
        $segment[1]='/';
    }else{
        $i=1;
        foreach ($arr as $key => $value) {
            $segment[$i++]=$value;
        }
    }
    if(is_null($segmentId)){
        return $segment;
    }else{
        if(isset($segment[$segmentId])){
            return $segment[$segmentId];
        }else{
            return false;
        }
    }
}

o id no caso está no segment 3:

$id=segment(3);

Basicamente:

<?php
    $datas = parse_url($_SERVER['REQUEST_URI']);
    $path = explode('/', $datas['path']);
    $id = end($path);

esse código vai pegar a última parte do array path e trazer pra você, claro que esse código pode ser uma função e pode conter mais elementos de teste, exemplo

<?php

	function get_last_id()
	{
		$datas = parse_url($_SERVER['REQUEST_URI']);
		$path = explode('/', $datas['path']);
		$id = end($path);
		if (is_numeric($id))
		{
			return $id;
		}
		return null;
	}

e para utilizar a função:

if ($id = get_last_id())
{
	echo $id; //o número
}

Site para estudos PHP.net - parse_url

1 curtida

muito boa a tua solução, bem ad hoc :heart:

o único problema que encontrei nela é que se colocar um / após o id ela retorna null, nada que um array_filter no $path não resolva.