【问题标题】:codeigniter 3 namespacing issuecodeigniter 3命名空间问题
【发布时间】:2016-04-01 23:00:52
【问题描述】:

我正在开发 codeigniter 3。我使用 composer psr-4 自动加载。我启用作曲家配置为 $config['composer_autoload'] = FCPATH."vendor/autoload.php";

和我的 composer.json 自动加载为

"autoload":{
  "psr-4":{
      "App\\":"application"
        },
  "classmap":["system"]
  }
}

我有一个抽象控制器 Controller.php as

<?php namespace App\controllers;
use CI_Controller;
abstract class Controller extends CI_Controller{}

效果很好。 但主要问题是当我写为控制器时

<?php namespace App\controllers;
use App\controllers\Controller;
use App\models\User;
class Welcome extends Controller {
    public function index()
    {
        $this->load->view('welcome_message');
    }
}

不起作用。如果我删除 namespace App\Controllers; 一切都会好起来的。 主要问题在哪里?谢谢。

【问题讨论】:

  • 尝试作曲家转储自动加载。
  • 不行,我之前试过。我得到了404 Page Not Found。如果我删除 namespace App\controllers; 行,错误就消失了。
  • 请检查您使用的 php 版本 php >= 5.3.0 支持命名空间
  • 是的,我知道。我正在使用 5.6 版本的 php。我还注意到该错误仅针对欢迎控制器中的namespace App\controllers;。但是Controller.php 中的命名空间和welcome controller 中的 use 语句工作正常。

标签: php codeigniter namespaces psr-4


【解决方案1】:

Codeigniter 不像 Symfony、Zend、CakePHP。它只是一个易于理解和使用的基本 PHP 框架。

<?php 
namespace App\controllers;
use App\controllers\Controller;
use App\models\User;
class Welcome extends Controller {
    public function index()
    {
        $this->load->view('welcome_message');
    }
}

在上面的代码中,您在代码中使用了namespaceuse 关键字。实际上不需要像那样加载控制器。


如果你想添加新的控制器。就这样使用吧。

文件名 = admin.php

<?php

    if (!defined('BASEPATH'))
        exit('No direct script access allowed');

    class Admin extends CI_Controller {
    }

您可能会遇到的一些问题

这对控制器来说就够了吗?

是的。这段代码只够创建新的控制器。

我们可以在控制器内部使用多少个函数

您可以使用 N-Number 个函数。但是,当它超过 300 行时,最好分成两行,这很常见

【讨论】:

  • 是的。它内置在框架中。但我想在这个框架中使用命名空间、作曲家和 psr-4 自动加载,那是我的主要目标。谢谢。
  • 命名空间不适用于 CI。为此,您必须使用 Symphony 或其他一些框架
【解决方案2】:

您正在修改 CI 以使用命名空间,但您不能在控制器中使用命名空间作为
因为路由过程。 Route 将无法找到控制器的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-05
    • 2019-11-30
    • 2013-03-26
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多