带参数的CakePHP控制器函数不显示javascript

时间:2013-03-22 15:15:53

标签: javascript cakephp parameters controller

当我使用带参数的控制器功能时,渲染视图似乎忘记了每个包含的.js文件。

public function view($id = null) {
    if(!$id) {
        throw new NotFoundException(__('Invalid post'));
    }

    $post = $this->Post->findById($id);

    if(!$post) {
        throw new NotFoundException(__('Invalid post'));
    }
    $this->set('post', $post);
}

如果我取走参数并在函数上放置变量'$ id = 1',则使用postID 1的视图在'posts / view'中呈现正常。

我以传统方式将javascript文件包含到default.ctp中:

echo "script type='text/javascript' SRC='../js/jquery-1.9.1.min.js'></script>";);

(它包括'&lt;'但是这个文本编辑器我不会因为安全原因而输入它我猜)

我对cakePHP的'js helpers'一无所知。我不能用传统方式使用javascript吗?

网站在其他所有视图中呈现正常(例如帖子/添加)和.js文件包含在'posts / view / 1'的源代码中

1 个答案:

答案 0 :(得分:2)

问题

您正在使用javascript的相对路径;

<script src='../js/jquery-1.9.1.min.js'></script>

在此网址中,../表示“当前位置的1个目录”,因此当您正在访问此网址时

http://mysite.com/home/

然后您的浏览器将正确尝试加载脚本;

http://mysite.com/js/jquery-1.9.1.min.js

但是, 如果您正在访问此网址;

http://mysite.com/home/and/some/more/

然后浏览器会在这里查找JavaScript:

http://mysite.com/home/and/some/js/jquery-1.9.1.min.js

如何解决问题

  1. 为所有'资产'使用绝对路径(CSS,JavaScript,图像); src='/js/jquery-1.9.1.min.js'
  2. 使用CakePHP助手输出脚本标签(毕竟,这就是它们的意思:简化你的工作:),例如echo $this->Html->script('jquery-1.9.1.min');