2017-10-12 91 views
-3

我正在PHP中构建应用程序,我试图从单个index.php文件处理路由和用户管理(使用会话和cookie)。在单个PHP文件中使用多个switch语句

下一块代码是我设置的基本路由逻辑。

$request_uri = explode('?', $_SERVER['REQUEST_URI'], 2); 

switch ($request_uri[0]) { 
// Home page 
case '/': 
    require 'partial/_main.php'; 
    break; 
// About page 
case '/about': 
    // do logic 
    break; 
// Everything else 
default: 
    header('HTTP/1.0 404 Not Found'); 
    echo "<h1>Not Found</h1>"; 
    break; 
} 

我也想控制未登录或登录的用户可以看到网站的其他部分。

例如:

$status = $_COOKIE['uid']; 

switch ($status) { 
case $status === '': 
    // Not logged in 
    // echo "Not logged in"; 
    break; 

default: 
    echo "Hello there, ".$status; 
    require 'partial/_user-actions.php'; 
    break; 
} 

现在的问题是我无法检查$_COOKIE['uid']当它没有设置。我收到一个“未定义的变量”错误。

+2

首先运行if(isset($ _ COOKIE ['uid'])),然后将其分配给$ status –

+0

@DhavalChheda做到了。现在,我的switch语句中的情况变得多余。 –

回答

0

$ status = isset($ _ COOKIE ['uid'])?$ _ COOKIE ['uid']:'';

+1

尽管此代码可能回答这个问题,但提供关于此代码为何和/或如何回答此问题的其他上下文可提高其长期价值。一个好的答案***将总是解释所做的事情以及为什么这样做,不仅是为了OP,还是为了将来访问SO。正如Mungo所说,*“代码只会回答不好!”* –

+2

我无法理解这个质量非常低的问题。 –

+0

来吧,这是一个简单的自我解释的代码行,它真的需要一个解释吗? – Webdesignamite

2

问题是您的价值尚未设置,并且与多个case语句无关。在尝试使用它之前,您需要检查该值。

if(isset($_COOKIE['uid'])) { 
    $status = $_COOKIE['uid']; 
} else { 
    $status = ''; 
} 
+0

那我不需要switch语句吗?请注意,我正在使用switch语句,以便可以设置默认行为。 –

+0

@JerryEjonavi你不会的。你可以把所有这些值放在一个if/else中,然后使用它。基本上只是扩展我的帖子中的例子。 – KaffineAddict