2014-12-23 2 views
0

Я пытаюсь отправить пользовательские данные с помощью $ .get из jquery, но 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.

Спасибо за вашу помощь

ответ

0

Раствор

Привет, я сделал немного апи, чтобы получить I данные из массива 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 для этой точки зрения. Для этого мне нужно идти в конфиге/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 массив всех пользователей с идентификатором < 100, готовый втянуты по сценарию ajax.

'_ext' => 'json' 

означает, что вы не должны идти на апи/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 (на хроме).

Надеюсь, что это поможет кому-то

1

CakePHP не волшебно карте параметров строки запроса в аргументы метода, который даже не поддерживается маршрутами.

Вы можете получить доступ Строка запроса paramters с помощью объекта запроса

$this->request->query('cat'); 

Смотрите также http://book.cakephp.org/3.0/en/controllers/request-response.html#query-string-parameters

Смежные вопросы