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

时间:2014-12-13 17:06:41

标签: yii2

作为标题,我将在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_;
    }
}

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

1 个答案:

答案 0 :(得分:18)

您应首先阅读namespaces in PHP,然后了解Yii 2使用命名空间的方式以及它在您使用的特定应用程序(基本/高级)中的组织方式。

您想要将哪种功能添加到控制器?大多数情况下,最好覆盖特定的控制器(例如,对于web,它将是yii\web\Controller),而不是基类。

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

<强> BaseController

namespace app\components;

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

<强> UserController中

namespace app\controllers;    

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

请注意 UserController如何扩展您的自定义BaseController。如果您使应用程序控制器的全部扩展为BaseController,则可以在所有应用程序的控制器中使用相同的功能/功能。

为什么?说您希望整个 frontend需要登录。通常,您必须手动修改每个控制器中的规则。您可以BaseController中声明规则以使所有内容都需要登录,并排除loginerrorsignup以及您需要的任何其他网页允许公众访问。

Yii2的新人应该知道的其他事情。在“高级”模板中,您实际上有多个应用。 “前端”和“后端”是他们自己的应用程序。您实际上可以复制“前端”(或“后端”)目录,并将其命名为“mainsite”并拥有第3个应用程序(只需搜索并将“frontend”的所有实例重命名为“mainsite”。在“环境”目录中,您可以复制前端,将其命名为“mainsite”并根据需要对其进行修改,因此如果需要,可以通过init合并文件。您还需要编辑environments/index.php以添加自己的init环境。

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

  

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

我要提及的最后一件事是,您可以随心所欲地创建您自己的应用! Yii2框架不是您的basicadvanced应用程序,它实际上在您的vendor目录中(通过Composer安装):)您正在使用的文件实际上只是Yii的方式为你铺设的东西。按照他们的行为,您可以根据需要创建自己的文件结构。您可以废弃它,并从头开始创建自己的Yii应用程序(根本不使用高级或基本!)。 不要被basicadvanced限制!