当前位置: 首页 > 知识库问答 >
问题:

排序是如何工作的?

华锦
2023-03-14

我试图通过生成默认的CRUD应用程序来理解排序在GridView中是如何工作的。排序发生在单击相应的属性后,该属性是表头。列名称附加到带有变量排序的url上,单击时调用action方法,但我想知道的是,在带有实际变量$排序的url中提到的action方法不存在于控制器中。

下面是一个例子

网址看起来像下面,

/advanced/frontend/web/index.php?r=site/index

但是在站点控制器中没有相应的操作方法作为函数actionIndex($sort)

共有1个答案

陶琦
2023-03-14

考虑以下示例

我们有乘客积垢

考虑乘客-模型和乘客搜索-其相应的搜索模型

乘客属性是id、姓名和country_name

乘客控制器中。php

<?php
...
public function actionIndex()
{
    $searchModel = new PassengerSearch();    
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}
...
?>

在名称列中搜索字符串a,在desc顺序中搜索排序id列

看看生成的url,它会是

`http://localhost/YII2proj/passenger/index?PassengerSearch%5Bid%5D=&PassengerSearch%5Bname%5D=a&PassengerSearch%5Bcountry_name%5D=&sort=-id`

以人类可读的格式

http://localhost/YII2proj/passenger/index?
PassengerSearch[id]=&
PassengerSearch[name]=a&
PassengerSearch[country_name]=&
sort=-id

观察PassengerSearch是一个数组。请参考-如何在url请求中发送数组?

关注参数到search()方法的对象PassengerSearch类它是Yii::$app-

之前的代码

行,插入以下代码

echo '<pre>';
print_r(Yii::$app->request->queryParams);
echo '</pre>';
die;

看看结果

Array
(
    [PassengerSearch] => Array
        (
            [id] => 
            [name] => a
            [country_name] => 
        )

    [sort] => -id
)

如果未完成搜索排序,则此数组将为空

所以这一行代码就像下面这样

<?php
if(isset($_GET['sort']) ||  isset($_GET['PassengerSearch']['id'] ...)
{
    // validate it because what if I changed url like
    // `http://localhost/YII2proj/passenger/index?PassengerSearcasdh[dfsid]=&PassengerSearch[name]=a&PassengerSearch[country_name]=&sorsfdft=-idadlashdfhls`
    // ie some scrap value
    // If error returned from validate function, default sorting is done, and malformed search param is not set
    // if success, fill up that array
}
?>

然后在搜索模型中,load()就是英雄。

上述代码在何处以及如何完成?-请参阅型号和加载()

搜索是通过和Filterwhere在加载ieload()后完成的,你可以在search()方法中看到

希望你明白搜索和排序背后的想法。

 类似资料:
  • 我正在尝试理解外部合并排序算法是如何工作的(我看到了相同问题的一些答案,但没有找到我需要的东西)。我正在阅读Jeffrey McConnell的《算法分析》一书,我正在尝试实现那里描述的算法。 例如,我有输入数据:,我只能将4个数字加载到内存中。 我的第一步是以4个数字块读取输入文件,在内存中对它们进行排序,然后将其中一个写入文件A和文件B。 我得到: 现在我的问题是,如果这些文件中的块不适合内存

  • 上周我阅读了有关vertx的文档。我不明白的是vertx处理器是如何工作的?例如 和服务器是: (P.S.我知道我首先应该检查处理程序是否成功,然后采取一些措施,但为了简化代码,我删除了这种检查,如果在30秒内没有任何响应,则处理程序中会出现异常,也会从正式文档中删除。) 从上面的代码中,客户端每秒发送请求,并且不等待响应,但是它有一个处理程序,当响应到来时将执行该处理程序。 jdbcVertx监

  • 应用程序具有上下文路径-->/spring-form-simple-project 因此,为了访问,我使用: 这个控制器又返回student.jsp,当提交这个student.jsp时,它用-->@RequestMapping(value=“/AddStudent”,method=RequestMethod.post)调用controller 任何关于这通常如何工作的指示都将是有帮助的。 谢谢!

  • 本文向大家介绍hibernate 是如何工作的?相关面试题,主要包含被问及hibernate 是如何工作的?时的应答技巧和注意事项,需要的朋友参考一下 读取并解析配置文件。 读取并解析映射文件,创建 SessionFactory。 打开 Session。 创建事务。 进行持久化操作。 提交事务。 关闭 Session。 关闭 SessionFactory。

  • 我很想知道谷歌应用商店服务中的Activity认可是如何工作的? 我认为活动是通过加速计数据识别的。是这样吗?。请告诉我详细情况如何

  • 我对GridBagLayout这一主题不熟悉,我无法理解约束、重量和填充之间的确切区别。 我可以而不分配。 除非您指定了至少一个非零值,否则所有组件都会聚集在其容器的中心。这是因为当权重为0.0(默认值)时,GridBagLayout会在其单元格网格和容器边缘之间放置任何额外的空间。 我的问题是,如果这是真的,那么为什么组件之间没有空间,它们看起来是连接的?