Php Yii2 Pjax不能正常工作
我有一个pjax表单,在这个表单中,我应该根据作者姓名的第一个字母来过滤他们。但每次pjax都在刷新页面。控制台中没有错误,在Php Yii2 Pjax不能正常工作,php,yii2,pjax,Php,Yii2,Pjax,我有一个pjax表单,在这个表单中,我应该根据作者姓名的第一个字母来过滤他们。但每次pjax都在刷新页面。控制台中没有错误,在网络选项卡中看不到错误请求(可能是因为刷新无法看到)。经过几次测试后,我明白问题出在代码$authorModels=$dataProvider->getModels()的数据行中。如果在它之前我var\u dump,它是可以的,但是在这之后没有var\u dump响应($authorModels=$dataProvider->getModels();var_dump($a
网络
选项卡中看不到错误请求(可能是因为刷新无法看到)。经过几次测试后,我明白问题出在代码$authorModels=$dataProvider->getModels()的数据行中代码>。如果在它之前我var\u dump
,它是可以的,但是在这之后没有var\u dump
响应<代码>($authorModels=$dataProvider->getModels();var_dump($authorModels);die;
),页面将被刷新。这是我的操作:
public function actionAuthors(){
$authorsPage = Page::findOne(46);
$banner = CategoryImage::find()->where(['page_id' => 46])->one();
$lang = Lang::getCurrent();
$randomAuthors = Author::find()->where('active=1')->orderBy(new Expression('rand()'))->limit(5)->all();
$randomBooks = Product::find()->where('active=1')->orderBy(new Expression('rand()'))->limit(4)->all();
$bookPage = Page::findOne(45);
$en_arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
$bg_arr = ['а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', ' й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ш', 'щ', 'ъ', 'ю', 'я'];
$array_in_use = [];
$pageSize = 5;
if(Yii::$app->request->isPjax){
if(isset($_GET['letter']) && $_GET['letter'] != ''){
$letter = '';
if($lang->url == "en"){
$letter = $en_arr[$_GET['letter']];
}else if($lang->url == "bg"){
$letter = $bg_arr[$_GET['letter']];
}
$sql = Yii::$app->db->createCommand("SELECT *
FROM `author` as a
LEFT JOIN `authorLang` as al ON a.`id`=al.`author_id`
WHERE a.`active`=1
AND al.`language`='$lang->url'
AND al.`names` LIKE '$letter%'")
->queryAll();
$countAuthors = count($sql);
$dataProvider = new SqlDataProvider([
'sql' => $sql,
'totalCount' => $countAuthors,
'pagination' => [
'pageSize' => $pageSize,
'route' => Yii::$app->getRequest()->getQueryParam('first_step')
]
]);
$authorModels = $dataProvider->getModels();
$pagination = new Pagination([
'totalCount' => $countAuthors,
'pageSize' => $pageSize,
'route' => Yii::$app->getRequest()->getQueryParam('first_step')
]);
return $this->renderPartial('authors', [
'pagination' => $pagination,
'authorModels' => $authorModels,
]);
}
}
我的js:
function pjaxFilterForm() {
var dataString = $("#filter-group2").serialize();
$.pjax.defaults.timeout = false;
$.pjax({
container: "#productGrid",
url: location.href.split("?")[0],
data: dataString,
scrollTo: false
});
return false;
}
视图:
我不知道这是否是唯一的一件坏事,但从中可以看出,
sql
参数需要字符串,但你给出了一个数组。即使你删除->queryal()
你仍然会得到一个不好的对象。所以,要给出字符串,你可以简单地作为字符串编写,而不使用Yii::$app->db->createCommand
:
$sql = "SELECT * FROM `author` as a LEFT JOIN `authorLang` as al ON a.`id`=al.`author_id` WHERE a.`active`=1 AND al.`language`='$lang->url' AND al.`names` LIKE '$letter%'";
谢谢!我一到笔记本电脑就会试试:)这就是问题所在!现在天气很好。非常感谢!您不使用yii2ar模型抽象的原因是什么?
$sql = "SELECT * FROM `author` as a LEFT JOIN `authorLang` as al ON a.`id`=al.`author_id` WHERE a.`active`=1 AND al.`language`='$lang->url' AND al.`names` LIKE '$letter%'";