Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Problema com url relativas, com arquivos organizados em pastas.

Olá.

O projeto não está estruturado em pastas, ou seja, todos os arquivos estão na raiz. Dessa forma temos o seguinte no menu:

<ul class="nav navbar-nav">
                    <li><a href="produto-formulario.php">Adiciona Produto</a

Agora, se organizarmos os arquivos referentes a produto na pasta produto e os arquivos referenres a categoria na pasta categoria, poderíamos ter:

<ul class="nav navbar-nav">
                    <li><a href="produto/produto-formulario.php">Adiciona Produto</a

Com isso, teríamos problema com as urls dependendo da localização do arquivo. Por exemplo, considere a estrutura

raiz
    bd
    produto
        dao
        form
        insere
    categoria
        dao
        form
        insere

Considere que form envia dados para insere e insere inclui(required) dao, que por sua vez inclui bd/conexao

Com essa estrutura estou tendo problemas com as urls., pois não consigo formar a url (relativa) da forma correta.

3 respostas

Oi William, tudo bom?

Você pode me mostrar qual URL está sendo gerada no link "Adiciona Produto" no seu navegador? Com ela é mais facil ver onde está sua pasta raiz e o que fazer pra consertar =)

solução!

Olá André.

A URL que estava sendo gerado ao "navegar" entre as pastas do projeto era algo como:

http://localhost/projeto/produto/produto/form_inserir.php

Estava repetindo a pasta base (produto).

A solução que encontrei hoje foi a seguinte:

<?php
define('URL', 'http://'.$_SERVER['SERVER_NAME'].'/projeto/');
?>

Esse código eu inclui no arquivo cabecalho.php que é incluido em todos os outros arquivos.

Funcionou. Entretanto, penso se essa estratégia é boa. Pois, o que estou fazendo na verdade é gerar uma URL absoluta, não é?

Outra alternativa que pensei e aproveito para perguntar é: passar um valor para o arquivo index, e ele ser responsável por decidir qual arquivo carregar (include) através de algo do tipo:

switch ($op) {
    case "x":
        require_once './produto/form_inserir.php';
        break;
    case "y":
        require_once './produto/listar.php';
        break;

Com isso a minha pasta de trabalho será sempre a pasta raiz.

Que tal? Qual outra alternativa dentro desse contexto mais simples?

Sua primeira solução resolve muito bem o problema de forma simples, parabéns =)

Independente da pasta que você estiver será gerado o link correto e não haverá nenhum problema pois é apenas uma constante que você definiu para direcionar para a raiz e gerar seu link corretamente.