Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Yii中正确实现runWithParams()

在Yii中正确实现runWithParams()
EN

Stack Overflow用户
提问于 2012-02-03 18:31:40
回答 2查看 1.7K关注 0票数 2

如果你看一下这个链接中的#3 http://www.yiiframework.com/doc/guide/1.1/en/basics.controller,它给你提供了一种将所有控制器函数组织到单独的php文件中的方法。

要做到这一点,你必须让每个php文件包含一个扩展CAction的类。每个类都必须在函数run()内拥有自己的运行代码。

这是我的UserController.php文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function actions()
{
    $FOLDER = '.User';
    $PROJECT_ROOT = 'application.controllers' . $FOLDER;

    return array (
        'list' => $PROJECT_ROOT . 'ListAction',
);

}

在我正在编写的应用程序中,我需要将变量传递给特定的操作。

Yii在Yii 1.7中实现了runWithParams($params)来实现这一点。但是,当我在(例如) DeleteAction.php文件runWithParams($params)中调用write而不是run(),并且我们的前端调用post/delete/?params=45而不是run()时,我得到一个错误,它说“无法在文件DeleteAction.php中找到run()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ListAction extends CAction
{
public function runWithParam($id)
{
    SiteController::actionLoggedin();
    $id = addslashes($id);
}

这意味着我需要...but(),我不能将参数传递给run()。我需要runWithParams($params)。

在function runWithParams($params) http://www.yiiframework.com/doc/api/1.1/CAction#runWithParams-detail的文档中

上面写着

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Runs the action with the supplied request parameters. This method is internally called by CController::runAction().

我搞不懂这是什么意思?我不明白如何才能成功地实现这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-05 01:46:12

您只需要在CAction类中实现run()

您将自动访问$_GET参数,当然,就像您正常操作时一样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ListAction extends CAction {
  public function run() {
    $id = $_GET['id']; // $_POST works too
    $model = Model::model()->findbyPk($id);
    // render your view next, whatever
  }
}

如果你想把额外的常量从控制器传递给CAction,你可以这样做:

在控制器中的操作设置中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function actions() {
  return array(
    'userSearch'=>array(
      'class'=>'application.controllers.User.ListAction', // path alias to your action
      'model'=>'User',
      'otherVariable'=>'something here',
  ));
}

然后在你的CAction中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ListAction extends CAction {
  public $modelName;
  public $otherVariable;
  public function run() {
    $this->modelName; //  'User' - passed in from the calling Controller
    $this->otherVariable; //  'something here' - passed in from the calling Controller
  }
}

我不确定您可能想要传递给您的操作的其他参数,但这应该涵盖了它。我希望这对你有帮助!

更新:

这个问题让我更深入地研究了代码,这实际上都与Yii的一个我不知道的功能有关。如果您在操作中声明了一个参数(即function actionTest($param)),那么Yii将解析请求的$_GET参数,并使用传递给函数的参数调用操作。因此,您不必自己获取$_GET参数。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://example.com/mycontroller/myaction?param1=test

function actionMyaction($param1) { // in a CAction, it would be run($param1)
  echo '$_GET parameter param1 set to '.$param1; // will echo "test"
}

它的实现方式是:

getActionParams()

  • runAction()中的
  1. 使用getActionParams()
  2. runAction()获取$_GET参数(如果有)将这些参数传递到getActionParams()
  3. runAction()中使用反射查看操作方法是否有参数(例如$param1)
    1. 如果有参数,它使用$_GET参数调用runWithParamsInternal()使用run()参数(例如$_GET参数)调用$_GET方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. Otherwise it just calls `run()` without any parameters

使用它是完全可选的,你仍然可以像正常操作一样访问$_GET参数,而不需要。基本上,这只是强制执行所需的$_GET参数。如果您的action需要一个参数,但是请求URL中没有$_GET参数,那么Yii会从invalidActionParams()返回“error400”。它为你省去了在操作中检查isset($_GET)的负担,这是一件很酷的事情。

票数 4
EN

Stack Overflow用户

发布于 2015-02-04 18:53:09

从同样的Yii指南,你在你的描述中指出:

从1.1.7版开始,自动参数绑定也适用于基于类的操作。当使用某些参数定义操作类的run()方法时,将使用相应的命名请求参数值填充这些参数。例如,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class UpdateAction extends CAction
{
    public function run($id)
    {
        // $id will be populated with $_GET['id']
    }
}

就这么简单。在run()中定义所需的所有参数。

当然,您总是可以通过$_ get 'key‘或通过Yii::app()->request->getQuery('key')来获取

如果你在run中添加了它们,要知道如果你不总是要传递所有的参数,你可以设置默认值,否则你会得到错误。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function run($id, $other_param='default_value')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9133678

复制
相关文章
免费音乐在哪里可以找到 免费音乐多吗
现在无论是老年人还是年轻人,甚至于婴儿,都非常爱听歌,有一些歌手为了感谢歌迷这么多年的支持,真的是好的歌手了。毕竟现在随便一首歌都是需要购买vip或者专辑,才可以听曲下载,更过分的是有些音乐播放器或者app在充值之后,只能听歌,但不能下载。那么免费音乐在哪里可以找到?
用户8739405
2021/07/09
5.9K0
SEO优化怎么做_个人做SEO在哪里可以找到
  网站建设之初必须选择合适良好的域名,域名的价值非常重要,在SEO过程中是不可忽视的环节。域名在选择时一定要精短,让搜索用户能够从域名中感受其中含义最为重要,很多企业都会采用简短的拼音所代替,并且更多的人们愿意选择.com后缀,其原因在于用户熟知度更高。其实为了能够及早展现新网站的价值,很多人更愿意去投资老域名,购买老域名时一定要考虑该域名的权重,之前是否被搜索引擎惩罚,同时也可以直接性够购买权重较高的二级域名进行运用,老域名的价值在于各大搜索引擎对其的信任感。
全栈程序员站长
2022/09/27
7280
SEO优化怎么做_个人做SEO在哪里可以找到
如何找到spring的官方文档[通俗易懂]
最近因为项目中遇到了一些问题, 百度不到比较好的方案, 就准备去看下spring的官方文档, 在此记录下:
全栈程序员站长
2022/10/02
2K0
如何找到spring的官方文档[通俗易懂]
怎样插入图表?用图表功能可以插入不同的图表。
1、点击[插入] 2、点击[图表] 3、点击[折线图] 4、点击[确定]
裴来凡
2022/05/28
1.6K0
怎样插入图表?用图表功能可以插入不同的图表。
在繁杂的业务需求中,如何找到API设计的平衡点
关于API设计,有什么好的设计方法,或者说如何来构建一个相对健壮的后端API设计体系?我觉得还是在不断的实践中犯低级错误逐步积累起来的,或者是到了不得不改的时候才会造成这种变革和重构的过程。
jeanron100
2019/11/11
5720
在繁杂的业务需求中,如何找到API设计的平衡点
【硬核教程】只需1秒—你也可以有自己的API文档
先聊聊为什么想到了要用Vuepress来代替原来写在Confluence上的文档。
SH的全栈笔记
2020/01/02
9050
API文档的自动生成
当开发一个大型软件时,需要定义成千上万个类,而且需要很多人参与开发。 每个人都会开发一些类,并在类里定义一些方法和域提供给其他人使用,但 其他人怎么知道如何使用这些类和方法呢? API文档就是用来说明这些应用程序接口的文档。
2020/10/23
9910
API文档的自动生成
Oh my God, Swagger API文档竟然可以这样写?
在ConfigureServices配置Swagger文档,在Configure启用中间件
有态度的马甲
2020/12/18
5670
高级程序员到底高级在哪里?
身为一名技术人,你是否遇到过这些情况? 工作效率低:别人1小时就能修复的bug,你需要3小时 没有存在感:技术趋势看不透,和同事聊天完全插不上话 技术提升慢:苦熬996,但升职加薪仍然遥遥无期 面试总碰壁:禁不住面试官深挖技术点,应聘总是一日游 无论是技术小白还是成熟程序员,在面对日新月异的技术发展浪潮时,总会有某些时刻感觉“自己完全没有成长”或是“发展空间有限”,透过现象看本质,当你遭遇瓶颈期的时候,并不是因为你能力不够,往往是由以下几点造成的: 1、网上的学习资料质量良莠不齐,遇到困难缺乏专业人士指点,
AI科技大本营
2023/05/08
1940
高级程序员到底高级在哪里?
Webhooks与API的区别在哪里?
Webhooks起初看起来像是API,但它们略有不同。它们之间的主要区别在于,webhooks不需要发出请求即可获得响应,而API则需要发送请求才能获得响应。使用Webhooks可以接收,而API需要您检索。
DevOps云学堂
2020/09/29
3.7K0
Webhooks与API的区别在哪里?
TensorFlow中的那些高级API
摘要: 在这篇文章中,我们将看到一个使用了最新高级构件的例子,包括Estimator(估算器)、Experiment(实验)和Dataset(数据集)。值得注意的是,你可以独立地使用Experiment和Dataset。不妨进来看看作者是如何玩转这些高级API的。 TensorFlow拥有很多库,比如Keras、TFLearn和Sonnet,对于模型训练来说,使用这些库比使用低级功能更简单。尽管Keras的API目前正在添加到TensorFlow中去,但TensorFlow本身就提供了一些高级构件,而且
IT派
2018/03/28
1.4K0
TensorFlow中的那些高级API
【整理】各种语言的API文档
名称 在线浏览 C/C++ 点击查看 Java se6 点击查看 Java se7 点击查看 Java se8 点击查看 C#/VB.net 点击查看 PHP 点击查看 Linux C 点击查看 Javascript 点击查看 Android 点击查看 Node.js 点击查看 Bootstrap 点击查看 MFC 点击下载 QT 点击查看 Win32API 点击查看 HTML 点击查看 CSS 点击查看 Redis 点击查看 Python 点击查看 Django 点击查看 MySQL 点击查看 A
ApacheCN_飞龙
2019/02/15
1.4K0
掌握了这些图表的关系,你也可以成为数据图表专家
今天在看资料的时候看到国外的一张关于数据图表关系的汇总图,相对于我们以前讲的数据图表之间的关系,他的分类和描述就更加的细,今天我们和大家来聊一聊这张图,如果你能梳理清楚这些图表的关系,并且能掌握数据图表的制作技能,你也可以成为数据图表专家。我们先来看下面这张图(感谢图表翻译者)
王佩军
2022/02/09
9210
掌握了这些图表的关系,你也可以成为数据图表专家
转:鱼群算法在文档管理系统中可以起到怎样的作用
鱼群算法是一种基于自然界中鱼群行为的计算机算法,可以用于优化问题的解决。在文档管理系统中,鱼群算法可以用来管理和优化网络资源的分配和使用。
啵啵鳐
2023/08/23
1470
Angular 文档中的修改链接是从哪里改的
aio\tools\transforms\templates\lib\githubLinks.html
HoneyMoose
2019/05/15
1.2K0
Angular 文档中的修改链接是从哪里改的
2 - 哪里可以运行 JavaScript?
原文:https://dev.to/bhagatparwinder/where-can-i-run-javascript-995
前端黑板报
2022/04/19
1.4K0
2 - 哪里可以运行 JavaScript?
api接口文档html模板,开发接口文档-api文档模板
大家好,又见面了,我是你们的朋友全栈君。 1、XXX项目接口文档版本控制信息版本日期描述作者V1.02018-8-13创建XXX1 获取所有字段1.1 获取所有字段请求地址:/session/fiel
全栈程序员站长
2022/09/15
18.3K0
字符串在JVM的哪里
另外String提供了一个API, java.lang.String.intern(),这个API可以手动将一个字符串对象的值转移到字符串常量池中
名字是乱打的
2022/05/13
4.4K0
字符串在JVM的哪里
点击加载更多

相似问题

使用mockito或Jmockit模拟私有静态最终字段

40

如何模拟最终的字段?mockito/powermock

20

使用mockito的存根最终方法

10

使用Java反射更改私有静态最终字段

146

使用Mockito/PowerMockito模拟私有最终静态对象

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文