CakePHP:如果不存在发布,则显示404或将它们定向为正确的发布

问题描述

|| 我在CakePHP网站上具有以下查看方法,用于显示投资组合项目:
function view ( $id,$slug )    
{   
    $post = $this->Portfolio->read(null,Tiny::reverseTiny($id));

    $this->set(compact(\'post\'));
}
这需要一个网址,例如:http://driz.co.uk/portfolio/3z/Paperview_Magazine 但是,http://driz.co.uk/portfolio/3z/也会显示该帖子,而http://driz.co.uk/portfolio/3z/Fake_Text也将显示! 不仅像http://driz.co.uk/portfolio/Random_Text这样的虚假URL只会显示空白屏幕,而且仍使用视图“视图” 1.)我如何确保该子弹正确无误,并强制在ID之外将其附加到url后面。我曾在诸如Forrst之类的网站上看到过,他们只是将用户重定向到正确的帖子,因此,如果他们错过了这些信息或输入了错误的信息,它只会自我纠正,例如帖子http://forrst.com/posts/Simple_pure_CSS_tooltip_with_arrow-BkY也可以在http://forrst.com/posts/Simple_pure_CSS_tooltip_and_extra_text_added_to_url_arrow-BkY中访问 2.)如何显示公牛网址的404,例如http://driz.co.uk/portfolio/Random_Text 谢谢     

解决方法

        答案1: 您可能可以通过使用beforeRender,beforeFilter或afterFind实现此目的。这将涉及获取提交的段,将其传递给模型,检查其是否有效,并根据需要执行任何其他逻辑。如果通过,则显示内容,否则重定向/无论如何。   但是,http://driz.co.uk/portfolio/3z/也会显示该帖子,而http://driz.co.uk/portfolio/3z/Fake_Text也将显示! 如果确定您的
view
方法只会使用两个参数;你可以这样做:
function view($id,$slug,$bogus=null) {

    if($bogus) {
        $this->cakeError(\'error404\');
    }
    // carry on as normal.
}
本质上,如果有第三个URI段,那么我们可以假定它是伪造的URL(尽管它仍然可以正常显示,因为您的方法使用的是
$id
,所以我认为这不是必需的。 为防止出现
portfolio/Random_text
,您需要检查该参数是否有效-因此,在使用
$id
时,它应为数字。然后,应对照数据库检查此结果,如果找到结果,则显示该结果,否则,不显示该结果。 可能还有其他解决方案。 也;海事组织,可能不值得担心太多。如果有人想搞砸URL,那么最好只给它们404,而不是尝试为他们解决自己的混乱。至少我的2美分!     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...