php rutas y directorios relativos

Me pregunto algo, pero parece que no puedo encontrar una respuesta buena y clara, o incluso una solución a este problema:

Mi sitio web PHP tiene la siguiente estructura:

root
   functions
   generators
   helpers
   scripts
   style
   index.php

Estas son todas las carpetas y un archivo php. Funciones contiene un montón de archivos op php relacionados con la conexión de la base de datos y varias otras operaciones de la base de datos, como insertar, eliminar, actualizar, ... Generadores contiene clases para generar automáticamente páginas web para que se vean iguales. Los ayudantes son clases que manejan inicio de sesión, cierre de sesión, registro, etc. Los scripts son javascript y Style es CSS.

En mi carpeta de generadores, hay un archivo mainGenerator.php, que genera varias partes del sitio web:

 private function generateLogin()
    {
        if (!isLoggedIn()) {
            echo "
                <h2>Login</h2>
                <form method='post' action='../helpers/login.php' id='loginForm'>
                <p>
                Username:<br/>
                <input class='search' type='text' name='username'/>
                Password:<br/>
                <input class='search' type='password' name='password'/>
                <input name='login' type='image' style='border: 0; margin: 0 0 -9px 5px;' src='style/login.png' alt='Login' title='Login'/><br/>
                No account yet? <a href='../register.php'>Register</a>
                </p></form>";
        } else {
            echo "
                <h2>Welome, <a href='user.php' style='color: #1293EE;'>" .
                 $_SESSION['user_name'] .
                 "</a></h2>
                <a href='logout.php'>Log off</a>";
        }
    }

Este código genera el cuadro de inicio de sesión en cada página o muestra un mensaje de bienvenida si el usuario ya ha iniciado sesión. Como puede ver, la acción hace referencia a "../helpers/login.php", porque esa es la ubicación relativa del loginhelper desde el punto de vista de este generador.

Ahora, aquí está el problema: si presiono el botón de inicio de sesión en index.php http: //example.com/ProjectName/index.ph) me redirige ahttp: //example.com/helpers/login.ph y dice que el archivo no se encuentra.

Veo cuál es el problema, la acción posterior ve que la solicitud proviene de index.php y sube un directorio y luego busca /helpers/login.php, que por supuesto no existe.

Una solución podría ser cambiar la acción a

action='/helpers/login.php'

pero eso me da el mismo problema si necesito acceso a generateLogin () desde un cierto subdirectorio ... ¿Cómo se puede resolver este problema en particular, es decir: que la referencia a /helpers/login.php se mantiene correcta, sin importar donde trato de acceder.

Respuestas a la pregunta(2)

Su respuesta a la pregunta