gpt4 book ai didi

codeigniter - 从部分 View 重定向到 Codeigniter 中的 show_404

转载 作者:行者123 更新时间:2023-12-03 18:37:07 26 4
gpt4 key购买 nike

我在 CodeIgniter 中使用 HMVC 模式。我有一个 Controller ,它通过 modules::run() 函数加载 2 个模块,并将一个参数传递给每个模块。

如果任一模块无法匹配传递的参数,我想调用 show_404()。它可以工作,但它会在我现有的模板中加载错误页面的完整 HTML,因此 HTML 会中断并且看起来很糟糕。我想我希望它重定向到错误页面,这样它就不会运行第二个模块。有没有办法做到这一点而不改变网址?

是否可以在不更改 URL 的情况下从模块重定向到 show_404()?

这是正在发生的事情的一个过度简化的示例:

www.example.com/users/profile/usernamehere

url 在用户 Controller 中调用此函数:

function profile($username)
{
echo modules::run('user/details', $username);
echo modules::run('user/friends', $username);
}

运行这些模块,找出用户是否存在:
function details($username)
{
$details = lookup_user($username);
if($details == 'User Not Found')
show_404(); // This seems to display within the template when what I want is for it to redirect
else
$this->load->view('details', $details);
}

function friends($username)
{
$details = lookup_user($username);
if($friends == 'User Not Found')
show_404(); // Redundant, I know, just added for this example
else
$this->load->view('friends', $friends);
}

我想只有更好的方法可以解决它,但我没有看到它。有任何想法吗?

最佳答案

如果子模块中有错误,您可以抛出异常并在 Controller 中捕获它,您将在其中执行 show_404()然后。

Controller :

function profile($username)
{
try{
$out = modules::run('user/details', $username);
$out .= modules::run('user/friends', $username);
echo $out;
}
catch(Exception $e){
show_404();
}
}

子模块:
function details($username)
{
$details = lookup_user($username);
if($details == 'User Not Found')
throw new Exception();
else
// Added third parameter as true to be able to return the data, instead of outputting it directly.
return $this->load->view('details', $details,true);
}

function friends($username)
{
$details = lookup_user($username);
if($friends == 'User Not Found')
throw new Exception();
else
return $this->load->view('friends', $friends,true);
}

关于codeigniter - 从部分 View 重定向到 Codeigniter 中的 show_404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com