如何在 Yii 2 中创建 BaseController 扩展 Controller

2024-06-18

正如标题,我将创建自定义控制器并覆盖 Yii 2 中的核心控制器, 下面是我的代码。 /创建BaseController,我把这个文件放在root/components中。/

namespace yii\base;
use Yii;
class BaseController extends \Controller{
    public function init() {
        parent::init();
    }
}

/* Extends BaseController.*/
namespace app\components;
use Yii;
class UsersController extends \BaseController
{
    /* more function is here.*/
    public actionIndex(){
        echo _FUNCTION_;
    }
}

我改变了更多方法,但这不起作用,请帮助我。谢谢大家。


你应该阅读有关PHP 中的命名空间 http://php.net/manual/en/language.namespaces.php首先,了解一下 Yii 2 使用命名空间的风格以及它在您正在使用的特定应用程序(基本/高级)中的组织方式。

您想向控制器添加什么样的功能?大多数时候最好覆盖特定的控制器(例如对于网络,它将是yii\web\控制器 http://www.yiiframework.com/doc-2.0/yii-web-controller.html)而不是基类。

假设您使用的是基本应用程序,代码应如下所示:

基础控制器

namespace app\components;

class BaseController extends \yii\web\Controller
{
    public function init()
    {
        parent::init();
    }
}

用户控制器

namespace app\controllers;    

class UserController extends \app\components\BaseController
{
    public actionIndex()
    {
        // ...
    }
}

Notice how UserController正在扩展您的定制BaseController。如果你做all您的应用程序的控制器扩展BaseController,您可以在所有应用程序的控制器上拥有相同的特性/功能。

Why?说你想要你的entire frontend需要登录。通常,您必须手动修改每个控制器中的规则。你could声明规则BaseController使一切都需要登录,并排除login, error, signup,以及您需要允许公众访问的任何其他页面。

对于 Yii2 的新手来说,还有一些事情应该知道。在“高级”模板中,您实际上有多个应用程序。 “前端”和“后端”是他们自己的应用程序。您实际上可以复制“frontend”(或“backend”)目录并将其命名为“mainsite”之类的名称,并拥有第三个应用程序(只需搜索“frontend”的所有实例并将其重命名为“mainsite”。在“environments”目录中,您可以复制前端,将其命名为“mainsite”并修改它以满足您的需求,因此可以通过以下方式合并它的文件init如果需要的话。您确实还需要编辑environments/index.php添加您自己的初始化环境。

“console”实际上也是一个应用程序,但不是用于 Web 访问,而是用于通过命令行访问,通常用于您自己的目的,例如处理 cron 作业或修剪旧数据。也许您提供网络托管,在“控制台”中您可以添加代码来创建他们的托管帐户。我很少使用控制台,但它很有用。

主要用于创建网站需要执行的后台和维护任务。

我想提的最后一件事是,你可以创建你自己的应用程序随你怎么便! Yii2 框架不是你的basic or advanced应用程序,它实际上在你的内部vendor目录(通过 Composer 安装):) 您正在使用的文件实际上只是 Yii 为您布置内容的方式。按照他们的做法,您可以根据需要创建自己的文件结构。您可以废弃它,并从头开始创建您自己的 Yii 应用程序(根本不使用高级或基本!)。不要被限制于basic or advanced!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Yii 2 中创建 BaseController 扩展 Controller 的相关文章

随机推荐

  • Kotlin 中使用 Retrofit @PartMap 的多部分请求错误 (Android)

    如果我在 Java 中使用这段代码 那么它工作得很好 当我在 kotlin 中转换该代码时 出现错误 Logcat 08 20 23 46 51 003 3782 3782 com qkangaroo app W System err ja
  • 我何时以及为什么要使用 ARC 将局部变量声明为 __weak?

    Mike Ash 撰写了 ARC 简介 http www mikeash com pyblog friday qa 2011 09 30 automatic reference counting html他在那里介绍了这样的内容 weak
  • WPF控件默认大小

    为 wpf 应用程序定义自定义资源主题时 我可以设置宽度 高度等 如何找到这些属性的默认值 即框架中提供的控件中使用的值 WPF 控件通常不包含任何类型的默认大小 WPF 的主要功能点之一是 除非您指定大小 否则所有内容都会动态调整大小 如
  • TransitionEnd 事件未触发?

    我有多个元素 每个元素都以 某种程度上 持续时间进行动画处理 我使用 CSS3 过渡 jQuery 库和transitionend辅助函数来自大卫 沃尔什 https davidwalsh name css animation callba
  • 如何通过函数设置指针引用

    在 C 中 我尝试通过将指针发送到函数来设置指针的值 但该值不会在函数外部更改 这是我的代码 include
  • Java - NoSuchMethodError 未被异常捕获[重复]

    这个问题在这里已经有答案了 我的印象是 Exception 非常适合捕获所有可能的异常 因为它们中的每一个都以 Exception 作为基类 然后 在开发 Android 应用程序时 我使用了以下方法 该方法在某些自定义 ROM 中已被删除
  • Django:重置密码不发送电子邮件

    我正在使用 Django 密码重置 我的代码中有这个代码设置 py EMAIL USE TLS True EMAIL HOST smtp gmail com EMAIL PORT 587 EMAIL HOST USER email prot
  • 如何在Android中设置对话框的图标

    我想在Android中自定义一个对话框 我知道如何设置对话框的标题 dialog setTitle O message 现在我想在标题前面设置图标 我怎样才能实现这个目标 Dialog dialog dialog new Dialog th
  • 创建全球唯一的 Android 标识符

    说到Android唯一ID 相信大家都见过this https stackoverflow com questions 2785485 is there a unique android device id 但是我也试图提出一个解决方案来唯
  • Storybook 和 AntDesign 组件 - 如何使用 CRA 和 Typescript 进行设置?

    我想使用 Typescript 在我的 CRA 项目中使用基于 AntDesign 组件构建的组件来设置 Storybook CRA v3 故事书 v5 25 AntDesign v3 23 2 我成功设置了 CRA AntDesign 设
  • 将按钮固定到容器的底角

    我正在使用 Flexbox 使表单垂直和水平居中 在此表单中 我想将一个按钮固定到 Flexbox 容器的右下角 我不知道如何将按钮固定在右下角 html body height 100 container height 100 displ
  • 具有多个 orderBy 的 Android firebase 查询

    我想检索我的 firebase 数据库中所有类型为 福音 的数据 这是我的数据库 DatabaseReference infoRef FirebaseDatabase getInstance geReference child info i
  • std::setw 如何处理字符串输出?

    我正在尝试使用设置宽度setw但是 对于将字符串输出到输出文件 我无法使其工作 我有下面的例子 setw example include
  • pine、node.js (express) 和 Access-Control-Allow-Origin

    我正在本地电脑上开发一个应用程序 前端应该使用 spinjs 构建 后端 api 使用 node js 构建 Spine 运行在端口 9294 上 node js 运行在端口 3000 上 在 Spine 中 我在模型中添加了以下内容 ur
  • 从 Mailgun 表单 Post PHP 中检索附件

    如何检索并保存通过 Mailgun 的 POST 表单发送给我的附件 下面是一些参数 attachment 1 filename gt crabby gif type gt image gif name gt attachment 1 te
  • 获取对 JOptionPane 静态方法创建的对象的引用

    我想知道是否可以获取对由 JOptionPane 的静态方法之一 例如 showMessageDialog 创建的 JDialog 对象的引用 我打算修改对话框在屏幕上出现的位置 更具体地说 我希望对话框默认显示在主应用程序窗口的左上角 而
  • viewroot 构建后如何应用 JSF2 PhaseListener?

    在我的 JSF2 应用程序中 我有一个阶段侦听器 需要在 RENDER RESPONSE 之前但在 JSF 构建 viewroot 之后执行 首先 我所做的就是在 faces config 中注册我的 PhaseListener 然后监听器
  • 加载外部 XSLT 时发生异常

    我有大量来自第三方的 XSLT 我需要用它来转换一些数据 如果我使用 xsltproc 它工作正常并按预期输出数据 我有以下 C 代码来尝试在进程中使用它 sXML 是 XML 的集合 oJob ContentTemplate 是 XSLT
  • 地址常量表达式

    我在阅读 C 编程语言第四版 一书时正在深入研究地址常量表达式 它有一个简短的段落描述了地址常量表达式 静态分配对象的地址 例如全局对象 变量 是常数 然而 它的值是由链接器分配的 而不是编译器 因此编译器无法知道 这样的地址常量 这限制了
  • 如何在 Yii 2 中创建 BaseController 扩展 Controller

    正如标题 我将创建自定义控制器并覆盖 Yii 2 中的核心控制器 下面是我的代码 创建BaseController 我把这个文件放在root components中 namespace yii base use Yii class Base