PHP : Condition ternaire en doublon

WRInaute impliqué
Bonjour,

je suis en train de coder un petit site et j'ai un soucis avec 2 conditions identiques "(isset($_SESSION['id']))". Je ne sais pas comment je pourrais les rassembler afin de faire plus propre. Si quelqu'un à une idée je suis preneur :

Code:
try{

    switch (key($_GET)) {
        
    case 'mes_logements':
        include('templates/pages/mes_logements.php');   
        break;
        default :
        include (isset($_SESSION['id'])) ? 'templates/pages/home.php' : 'templates/pages/login.php';
        break;
        
    }
    
} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br>'; die(); }

echo $view-> render((isset($_SESSION['id']))? 'templates/layouts/primary.php' : 'templates/layouts/login.php');

Merci d'avance
 
WRInaute accro
En définissant une autre variable qui contient la valeur du isset(), mais ce n'est pas spécialement plus propre.
Par contre l'indentation (p-e tronquée par le forum, je n'en sais rien) et le non respect des normes PSR, ça oui c'est pas propre.
 
WRInaute impliqué
J'ai fais ceci finalement. Ca fait plus propre :

Code:
    if(!isset($_SESSION['id'])){

        switch ($_GET) {
            
        case 'my_homes':
            include('templates/pages/my_homes.php');   
            break;
            default :
            include ('templates/pages/dashboard.php');
            break;
        }
        
        echo $view-> render('templates/layouts/primary.php');
        
    }else{
        
        include ('templates/pages/login.php');
        
        echo $view-> render('templates/layouts/login.php');   
    }
 
WRInaute accro
PHP:
switch ($_GET) {
$_GET est un array

Alors j'aurais plutôt fait comme ceci:
PHP:
<?php
$layout = 'login';
$page = 'login';

if (!isset($_SESSION['id'])) {
    $layout = 'primary';
    $page = key($GET) === 'my_homes' ? 'my_homes' : 'dashboard';
}

include "templates/pages/{$page}.php";
echo $view->render("templates/layouts/{$layout}.php");
 
Dernière édition:
WRInaute impliqué
J'avais pas pensé à cette solution. Par contre j'ai un doute concernant cette ligne :

$page = key($GET) === 'my_homes' ? 'my_homes' : 'dashboard';

Plus tard j'aurais bien plus qu'une condition, j'aurais toujours my_homes, mais il y en aura egalement une dizaine d'autres dont la page et le layout auront toujours le meme nom.

Un switch n'est pas préférable ?
 
WRInaute accro
S'il y en a plusieurs, je ferais un array des pages valides:
PHP:
<?php
$pages = ['my_homes', 'page_foo', 'page_bar'];
if (in_array(key($_GET, $pages))) {...}
 
WRInaute impliqué
J'avais pensé à ca car dans ta solution précédente il n'y a pas de défaut si $_GET est vide

Code:
$layout = 'login';  

if(isset($_SESSION['id'])){
   
    $layout = 'primary';
   
    $page = (($_GET) != null) ? $_GET : 'dashboard' ;
   
}else

$page = (($_GET) != null) ? $_GET : 'login' ;

include ('templates/pages/'.$page.'.php');

echo $view->render("templates/layouts/{$layout}.php");
 
Discussions similaires
Haut