我尝试使用来自jquery的$ .get发送自定义数据,但cakephp 3无法识别变量。
这是我在控制器中的功能:
public function view($cat,$id,$page){
$comments = $this->Comments->find('all')->where(['category =' => $cat, 'AND' => ['category_id =' => $id]])->order(['comments.created' => 'DESC'])
->contain([
'Reports' => function($q){return $q->where(['user_id =' => $this->Auth->user('id')]);},
'Chars' => function($q){ return $q->select(['id','name','class','race','level','guild_id', 'user_id'])
->contain(['Guilds' => function($q){ return $q->select(['id','name']);
}]);
}])->limit(3)->page($page);
if($cat == 'Videos'){
$subject = $this->Comments->Videos->get($id);
}
$category = $cat;
$this->set(compact('subject','comments','category'));
}
}
这里是.js
$('.more').click(function(){
$.get($(this).attr('href'),{cat:'Videos',id:'44',page:'2',function(data){
$('.coms').empty().append(data);
});
return false;
});
链接:
<?= $this->Html->link('More', ['controller' => 'Comments','action' => 'view'], ['class' => 'btn btn-primary more']) ?>
.js中的修复值用于测试,如果我使用$ .get(href)发送链接中的数据,它会起作用,但我想知道如何在$ .get请求中传递自定义数据。 / p>
感谢您的帮助
答案 0 :(得分:1)
CakePHP并不会将查询字符串参数神奇地映射到方法参数,甚至路由都不支持。
您可以通过请求对象
访问查询字符串参数$this->request->query('cat');
另请参阅 http://book.cakephp.org/3.0/en/controllers/request-response.html#query-string-parameters
答案 1 :(得分:0)
解决方案
嗨,我做了一个api来从json数组中获取我需要的数据。
所以我创建了一个ApiController来完成我需要的所有ajax请求。这是测试示例:
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
class ApiController extends AppController
{
public function test($id)
{
$UsersTable = TableRegistry::get('Users');
$users = $UsersTable->find()->where(['id <' => $id]);
$this->set(compact('users'));
}
}
?>
我希望从ajax调用中获取所有用户的列表(这是最糟糕的想法,但它只是用于测试;)
现在我需要为这个视图启用json。为此,我需要在config / routes.php中添加:
Router::scope('/api', function($routes){
$routes->extensions(['json']);
$routes->connect('/test/*', ['controller' => 'Api', 'action' => 'test', '_ext' => 'json']);
});
现在当我继续http://localhost/mywebsite/api/test/100时,我有一个json数组,其中所有用户的id都为&lt; 100,准备好被ajax脚本拉。
'_ext' => 'json'
意味着您不必继续使用api / test.json来显示json数组
现在在一个随机控制器的随机视图中,我按下了一个按钮来尝试所有这些,我调用我的javascript文件来执行我的ajax请求。
<button class="test">Test button</button>
<?= $this->Html->script('test', ['block' => true]) ?>
现在我的test.js:
$(document).ready(function(){
var value = 100;
$('.test').click(function(){
$.get('/api/test/' + value, function(data){
console.log(data);
});
});
});
我单击按钮,当我按下F12(在chrome上)时,日志显示一个包含我想要的所有用户的数组。
希望这会有所帮助