【问题标题】:How to extend controller in Codeigniter 4?如何在 Codeigniter 4 中扩展控制器?
【发布时间】:2018-05-28 13:42:30
【问题描述】:

如何在 codeigniter 4 中创建自己的核心控制器,例如 codeigniter 3

【问题讨论】:

    标签: codeigniter controller


    【解决方案1】:

    当您说“核心”控制器时,我理解您是指“基本”控制器,在 CI v3 中通常被命名为 MY_Controller。如果这就是您所要求的,那么由于命名空间和自动加载器,在 v4 中实际上要容易得多。此外,不需要使用像MY_ 这样的前缀。

    这就是它是多么容易。 “基础”控制器...

    文件:/application/Controllers/Base.php

    <?php namespace App\Controllers;
    
    class Base extends \CodeIgniter\Controller
    {
        //your code here
    }
    

    然后扩展上述内容以创建任何其他控制器

    文件:/application/Controllers/Home.php

    <?php namespace App\Controllers;
    
    class Home extends \App\Controllers\Base
    {
       // Your code here
    }
    

    Home 控制器将继承您在Base 中定义的所有属性和方法。

    【讨论】:

    • 好的,非常感谢@DFriend。我会努力的!!
    【解决方案2】:

    你不需要创建另一个核心控制器,已经提供了一个核心控制器,即BaseController。 您只需将其扩展到您的选择

    【讨论】:

      【解决方案3】:

      试试这个

      <?php namespace App\Core;
      
      use CodeIgniter\Controller;
      
      class Home extends Controller
      {
      
      }
      

      【讨论】:

        【解决方案4】:

        查看我的代码

        <?php
        
        namespace Modules\Shared\Controllers;
        
        /**
         * Class BaseController
         *
         * BaseController provides a convenient place for loading components
         * and performing functions that are needed by all your controllers.
         * Extend this class in any new controllers:
         *     class Home extends BaseController
         *
         * For security be sure to declare any new methods as protected or private.
         *
         * @package CodeIgniter
         */
        
        
        use CodeIgniter\HTTP\RequestInterface;
        use CodeIgniter\HTTP\ResponseInterface;
        use CodeIgniter\RESTful\ResourceController;
        use Modules\Auth\Config\Services;
        use Myth\Auth\AuthTrait;
        use Psr\Log\LoggerInterface;
        use  Modules\Shared\Interfaces\UrlQueryParamInterface;
        use  Modules\Shared\Libraries\UrlQueryParam;
        
        class ApiController extends ResourceController
        {
            use AuthTrait;
        
            protected $format = "";
            public object $userObject;
            public UrlQueryParamInterface $urlQueryParam;
        
            /**
             * An array of helpers to be loaded automatically upon
             * class instantiation. These helpers will be available
             * to all other controllers that extend BaseController.
             *
             * @var array
             */
            protected $helpers = [
                'cookie',
                'url',
                'from',
                'filesystem',
                'text',
                'shared'
            ];
        
            /**
             * Constructor.
             *
             * @param RequestInterface $request
             * @param ResponseInterface $response
             * @param LoggerInterface $logger
             */
        
        
            /**
             * @var string
             * Holds the session instance
             */
            protected $session;
        
            public function __construct()
            {
        
                $this->userObject = (object)[];
            }
        
            public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
            {
                // Do Not Edit This Line
                parent::initController($request, $response, $logger);
        
        
                $this->urlQueryParam = new UrlQueryParam($request);
        
                $requestWithUser = Services::requestWithUser();
                $this->userObject = $requestWithUser->getUser();
        
            }
        
        }
        
        
        
        <?php
        
        namespace Modules\Common\Controllers;
        
        
        use Modules\Common\Config\Services;
        use Modules\Common\Entities\AdvertisementEntity;
        use CodeIgniter\HTTP\ResponseInterface;
        use Modules\Shared\Controllers\ApiController;
        
        class Advertisement extends ApiController
        {
        
        
            /**
             * index function
             * @method : GET
             */
            public function index()
            {
                $advertisementEntity = new AdvertisementEntity();
                $this->urlQueryParam->dataMap($advertisementEntity->getDataMap());
        
                $advertisementService = Services::advertisementService();
                $findAllData = $advertisementService->index($this->urlQueryParam);
        
        
                return $this->respond([
                    'data' => $findAllData['data'],
                    'pager' => $findAllData['pager']
                ], ResponseInterface::HTTP_OK, lang('Shared.api.receive'));
        
        
            }
        
            /**
             * show function
             * @method : GET with params ID
             */
            public function show($id = null)
            {
        
        
                $advertisementService = Services::advertisementService();
                $findOneData = $advertisementService->show($id);
        
                return $this->respond([
                    'data' => $findOneData['data'],
                    'pager' => $findOneData['pager']
                ], ResponseInterface::HTTP_OK, lang('Shared.api.receive'));
        
            }
        
            /**
             * create function
             * @method : POST
             */
            public function create()
            {
        
        
                $rules = [
                    'name' => 'required|min_length[3]|max_length[255]',
                    'link' => 'required',
        
        
                ];
        
                if (!$this->validate($rules)) {
        
                    return $this->respond([
                        'error' => $this->validator->getErrors(),
        
                    ], ResponseInterface::HTTP_NOT_ACCEPTABLE, lang('Shared.api.validation'));
        
                };
        
        
                $advertisementEntity = new AdvertisementEntity((array)$this->request->getVar());
                $advertisementEntity->enableStatus()->createdAt();
                $advertisementService = Services::advertisementService();
                $advertisementService->create($advertisementEntity);
        
        
                return $this->respond([
                    'insertId' => $advertisementService->getInsertID()
                ], ResponseInterface::HTTP_CREATED, lang('Shared.api.save'));
        
        
            }
        
            /**
             * update function
             * @method : PUT or PATCH
             */
            public function update($id = null)
            {
        
        
                if ($this->request) {
                    //get request from Vue Js
                    $json = $this->request->getJSON();
                    if (!isset($id)) {
                        $id = $json->id;
                    }
        
        
                    $rules = [
                        'name' => 'required|min_length[3]|max_length[255]',
                        'link' => 'required',
        
        
                    ];
        
                    if (!$this->validate($rules)) {
                        return $this->respond([
                            'error' => $this->validator->getErrors(),
        
                        ], ResponseInterface::HTTP_NOT_ACCEPTABLE, lang('Shared.api.validation'));
        
                    }
        
        
                    $advertisementEntity = new AdvertisementEntity((array)$this->request->getVar());
                    $advertisementEntity->updatedAt();
        
                    $advertisementService = Services::advertisementService();
                    $advertisementService->update($id, $advertisementEntity);
        
        
                }
                return $this->respond([
                ], ResponseInterface::HTTP_OK, lang('Shared.api.update'));
        
        
            }
        
            /**
             * edit function
             * @method : DELETE with params ID
             */
            public function delete($id = null)
            {
        
                $advertisementService = Services::advertisementService();
                $advertisementService->delete($id);
        
                return $this->respond([
                ], ResponseInterface::HTTP_OK, lang('Shared.api.remove'));
        
        
            }
        
        }
        
        

        【讨论】:

          猜你喜欢
          • 2015-01-22
          • 2012-01-10
          • 2017-09-13
          • 2012-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多