YII2框架开发程序时,很多时候会遇到一些功能大致相同的方法,这时候,可以选择把这些方法统一写到外部以方便管理。

例如在yii2的演示包里siteController.php文件中就有一段:

 public function actions(){return ['error' => ['class' => 'yii\web\ErrorAction',],//返回错误'captcha' => ['class' => 'yii\captcha\CaptchaAction','fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,],//返回验证];}

在这段程序里,分别用到了error和captcha两个外部action,分别用来回显错误和校验图形验证码。我们可以在vendor/yiisoft/yii2里找到对应的程序文件。

类似的,Yii2共提供了如下action:

InlineAction
CaptchaAction
CreateAction
DeleteAction
IndexAction
OptionsAction
UpdateAction
ViewAction
ErrorAction
GenerateAction

仿造这些文件,我们也可以编写自己的外部action。

第一步:找到frontend/libs文件夹,新建 文件TestAction.php

自写义的外部action,可以放到任意位置,作为示例,我把它放到网站的frontend/libs里面。

第二步:在文件TestAction.php中输入代码:

仿照已有的action文件,在新建的TestAction.php文件中写入如下内容:

<?php
namespace frontend\libs;
use yii\base\Action;
class TestAction extends Action {public function run() {return $this->controller->render('test');}
}

第三步:在SiteController里调用testAction:

修改SiteController的function actions,加上以下代码中的高亮部分:

public function actions(){return ['error' => ['class' => 'yii\web\ErrorAction',],//返回错误'captcha' => ['class' => 'yii\captcha\CaptchaAction','fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,],//返回验证'test'=>['class'=>'frontend\libs\TestAction',]];}

第四步:在views/site下添加test.php视图文件

在TestAction中我们调用了视图,所以,需要添加相应的视图文件。如果在多个不同的controller中用到TestAction,那么,可以为每个controller配置不同的视图。

view/test.php


<h1>TestAction</h1>
<p>这是TestAction演示页面!</p>

第五步:现在,TestAction已经完成了,我们可以输入网址预览一下:

接下来,我们可以试试为testAction添加参数:

第六步:修改TestAction.php,添加待输入的三个参数:

<?php
namespace frontend\libs;
use yii\base\Action;
class TestAction extends Action {public $param1=NULL;public $param2=NULL;public function run($get=NULL) {return $this->controller->render('test',['get'=>$get,'param1'=>$this->param1,'param2'=>$this->param2]);}
}

这段代码中需要配置三个参数,$get、$param1、$param2,其中$get是在url中传递的,例如按照我电脑上的配置,访问http://127.0.0.8/index.php?r=site%2Ftest&get=xxx,就会为$get赋值xxx。而$param1和$param2则是在controller中设置的。

第七步:修改SiteController的function actions,为$param1和$param2赋值

public function actions(){return ['error' => ['class' => 'yii\web\ErrorAction',],'captcha' => ['class' => 'yii\captcha\CaptchaAction','fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,],'test'=>['class'=>'frontend\libs\TestAction','param1'=>'参数一','param2'=>'参数二',]];}

这样,$param1和$param2参数就传递过去了。

最后,配置视图views/site/test.php完成测试:

<h1>TestAction</h1>
<p>这是TestAction演示页面!</p>
<p>$get="<?=$get?>"</p>
<p>$param1="<?=$param1?>"</p>
<p>$param2="<?=$param2?>"</p>

按各人本地路径访问网址如:http://127.0.0.8/index.php?r=site%2Ftest&get=xxx

可看到显示结果

[actions] -- actions详细使用相关推荐

  1. delegate IDE build/run actions actions to Maven

    使用idea2020后,运行maven项目,main方法运行不起来,报错:xxx.xxx包不存在,xxx.xxx找不到,实则相关的包都是存在的,并且可以打包成功.也就是说,可以打包成功但是idea不能 ...

  2. Github Actions:再次改变软件开发

    本文转自 FEPulse 公众号(微信搜索 FEPulse,精选国内外最新前端资讯,为你把握前端脉搏). Github Actions 是 GitHub Universe 大会上发布的,被 Githu ...

  3. GitHub Actions 支持 skip ci 了

    GitHub Actions 支持 "skip ci" 了 Intro GitHub Actions 作为 GitHub 官方的 CI 支持,很多开源项目已经在使用 Actions ...

  4. awk学习笔记八-Actions

    原文: http://doc.lazyhack.net/awk.htm Actions Actions 是由下列指令(statement)所组成 : 表达式 ( function calls, ass ...

  5. Pinia学习笔记之--核心概念Actions

    Actions Actions相当于组件中的方法.他们可以被定义在defineStore()的actions属性下,它们非常适合定义业务逻辑. export const useStore = defi ...

  6. Selenium(一)12.Actions的常用方法

    1.鼠标悬停 一般有一些下拉菜单需要鼠标放在下拉箭头才会出现,这个时候就需要鼠标悬停的操作进行下一步操作 应用: package com.ming.Selenium.Actions;import or ...

  7. pinia 的使用(三)—— actions

    文章目录 1.状态操作 actions ① 状态更新 ② 重置状态 $reset ③ 跨容器调用 ④ actions 的操作 ⑤ 注意点 1.状态操作 actions actions 可以通过完全输入 ...

  8. 几分钟搞懂Vuex(State,Mutations,Actions)

    文章目录 State Getters Mutation Actions 这是Vuex官方给出的图片,看起来有点不好理解,上详解!!!! 开始介绍之前,我们需要将Vuex挂载到Vue实例上面,这样我们才 ...

  9. Vuex的作用、使用、核心概念(State、Mutations、Getters、Actions、Modules)、文件抽离

    vue入门–基础命令+axios+案例练习 vue入门–vue常用属性.生命周期.计算属性.过滤器.组件.虚拟DOM.数组的响应式方法.页面闪烁.ES6简单语法增强 vue入门–js高阶函数(箭头函数 ...

最新文章

  1. “我的开源项目被威胁了!”
  2. 信号处理之filter去噪
  3. Tomat6架构探讨(二续)
  4. 充分发挥bpl包的作用
  5. linux vim分屏:水平和垂直分屏
  6. 2. Using 'dp' instead of 'px' to set text size
  7. Distributed System: Lamport clock vs Vector clock | 分布式系统:Lamport clock 和 Vector clock 详解
  8. Angular Service依赖注入的一个具体例子
  9. android 图片传递,如何使用包在Android活动之间传递图像(位图)?
  10. 涉密文件检查工具_深圳龙华资料文件销毁粉碎销毁资料文件公司一览表
  11. 网页打印物理大小尺寸的单位换算
  12. C# WinFrom 用Execl做模版进行数据导入简介
  13. java captcha 验证码_java生成图片验证码的示例代码
  14. 小米6Android11刷机包,小米6刷机包MIUI12
  15. leetcode 买卖股票的最佳时机含手续费(Java)
  16. 基于PCA算法生成平均脸
  17. Linux 多点电容触摸屏实验(1)
  18. 同时掌握96门语言,取得多项世界突破,百度发布预训练模型ERNIE-M
  19. MAC 无法重启或关机
  20. Python直男作死篇:生日蛋糕小游戏

热门文章

  1. Fragment already added问题的解决
  2. 静脉炎的症状是什么?
  3. iOS 环信移动客服接入
  4. 软件开发中的SD、SE、QA和RD是什么意思?
  5. 优秀开源云原生工具推荐——系列3
  6. 关于思源笔记与docker的部分问题
  7. SQL Server事物日志
  8. ubuntu清空回收站命令
  9. ubuntu下回收站无法清空
  10. URAL 1099 Work Scheduling