2
respostas

URL sem barra no final, não carrega o CSS da página.

Olá Pessoal, estou estudando URL amigável, e após a implementação, se eu não colocar uma barra no final da URL, o CSS da página não carrega, oque pode estar acontecendo ?

Obrigado desde já!

2 respostas

Oi Mario, tudo bom?

É dificil dizer acertivamente sem ver o código. Mas, acredito que seja um problema de url relativa. Dependendo de como você está chamando as imagens na sua página o servidor vai buscar a imagem relativa a URL digitada. O ideal é sempre trabalhar com caminhos absolutos para evitar esse tipo de problema.

Abraço

Essa barra, esta causando não só problemas com o caminho do CSS, mas também no resgate de parâmetros via GET, vou explicar mais ou menos o cenário.

O projeto esta em servidor local e desenvolvido da seguinte forma.

index.php, responsável por organizar a URL amigável.

require_once 'views/header.php';
if(isset($_SESSION['logado'])){
$path = $_SERVER['REQUEST_URI'];
$path = rtrim($path, '/');
$path = filter_var($path, FILTER_SANITIZE_URL);
$path = explode('/', $path);

$controllerName = $path[3];
$actionName = $path[4];

if (!empty($controllerName) && !empty($actionName)) {
    require_once 'vendor/autoload.php';
    $controller = new $controllerName;
    $controller->$actionName();
}else{
    header("Location: FilesController/listfiles");
}

}else{
    require_once 'vendor/autoload.php';
    $controller = new FilesController;
    $controller->login();
}
require_once 'views/footer.php';

Para que o CSS funcione independente da barra, eu tenho que colocar os diretórios iniciando da raiz do projeto, caso eu insira o caminho relativo ao arquivo CSS a partir do diretório de onde ele é chamado, exemplo:

<link rel="stylesheet" type="text/css" href= "../assets/css/template.css">

A barra no final do endereço faz toda a diferença no carregamento, ai vai a pergunta, eu tenho mesmo que colocar o caminho absoluto do arquivo, com os diretórios a partir da raiz?

Este é o primeiro inconveniente que a barra esta causando, o outro seria o seguinte:

Possuo um controller que pega os parâmetros via GET e manda para o model validar e consultar.

Exemplo:

public function listFiles(){
 $pesquisa = isset($_GET['pesquisar']) ? $_GET : null;

 $files = $filesModel->listFiles($pesquisa);

 $this->loadView('list_files', array('files'=>$files));
}

O model por sua vez, filtra as informações validas e realiza a consulta, depois a view fica a cargo de apresentar os dados disponibilizados . Na view list_files existe um formulário de pesquisa e sua action="", vazia, remete para a função onde esta encapsulado , desta forma, se houver uma barra no final da url, tudo funciona normalmente e o controller consegue capturar os parâmetros.

Exemplo:

dir1/dir2/ControllerName/actionName/?parametro1=valor&parametro2=valor

Agora, se por algum motivo, após o actionName não existir uma barra, que é bem provável que aconteça em algum momento, a url fica da seguinte forma e o controller não consegue capturar as informações.

dir1/dir2/ControllerName/actionName?parametro1=valor&parametro2=valor

Caso eu coloque o caminho absoluto na action do form, action="dir1/dir2/ControllerName/actionName/", tudo funciona normalmente, pois estou forçando o caminho e a barra para os parâmetros vir a seguir, agora se eu colocar a action desta forma action="actionName/" e no final da url não existir barra, também funciona, mas toda vez que envio um GET ele incrementa o actionName na url, exemplo:

Primeiro submit do form:
dir1/dir2/ControllerName/actionName?parametro1=valor&parametro2=valor
Segundo submit do form
dir1/dir2/ControllerName/actionName/actionName?parametro1=valor&parametro2=valor
e assim por diante...

Acho meio desnecessário a inserção do caminho completo na action, sendo que ele precisa simplesmente enviar os dados para o mesmo ambiente em que se encontra encapsulado. Resumindo, estou com problemas em definir uma forma para trabalhar com os caminhos, teria algum padrão correto para eu adotar, que evite estes problemas com url.

OBS: Caso tenham alguma observação, com relação a forma que venho desenvolvendo o projeto, tirando essa questão da url, serão muito bem vindas as dicas.

Obrigado desde já.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software