如何在cake php中的ctp文件中包含webroot的php文件?

时间:2012-03-28 10:02:58

标签: php cakephp cakephp-1.3

我有一段代码,谷歌登录它在下面给出。它在普通的php中包含一个文件。代码如下。

require 'openid.php';
try {
# Change 'localhost' to your domain name.
$openid = new LightOpenID('http://s396001438.onlinehome.us/test2/');
if(!$openid->mode) {
if(isset($_GET['login'])) {
$openid->identity = 'https://www.google.com/accounts/o8/id';
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Google</button>
</form>
<?php
} elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
`enter code here`} else {
    echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
}
}catch(ErrorException $e) {echo $e->getMessage();}  

2 个答案:

答案 0 :(得分:0)

此代码完全错误。

  • Webroot是 这样的lib的错误位置,它属于/ app / vendors,用App :: import()加载,在book.cakephp.org中查找
  • 您没有使用FormHelper,因此很可能不使用安全组件,表单可能被利用
  • 请勿直接使用$ _GET和$ _POST,请使用$ this-&gt; data&amp; $ this-&gt;请求1.3
  • 我不知道这个lib,但整个代码看起来好像违反了MVC框架。 LightOpenId应该很可能在控制器中完成,应该捕获异常并将其设置为视图的错误消息。也许更好的将它包装在一个组件中。
  • 阅读并更重要了解 MVC 模式
  • 阅读CakePHP的基础知识并进行博客教程

答案 1 :(得分:0)

此代码的正确位置是供应商或将其转换为插件(对于cakephp 2.0)。

使用cakephp 1.3,你应该把它放在供应商和文件夹中,然后执行

App::import();

请查看食谱以查看相同的用法示例。 http://book.cakephp.org/1.3/en/view/943/Loading-Vendor-Files

App类是非常有用的实用程序库。 http://book.cakephp.org/1.3/en/view/933/The-App-Class