问题描述
||
我在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美分!