Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过composer自动加载加载特性_Php_Composer Php_Autoload_Traits - Fatal编程技术网

Php 如何通过composer自动加载加载特性

Php 如何通过composer自动加载加载特性,php,composer-php,autoload,traits,Php,Composer Php,Autoload,Traits,我已尝试将我的traits文件夹添加到composer自定义自动加载,但这不起作用并返回错误。那么这可能是通过composer自动加载的吗?非常感谢你的回答 我的特点: trait User { public function is_email_unique($email) { return $this->User->get_one_by_email($email) ? FALSE : TRUE; } public function is_usernam

我已尝试将我的traits文件夹添加到composer自定义自动加载,但这不起作用并返回错误。那么这可能是通过composer自动加载的吗?非常感谢你的回答

我的特点:

trait User
{
  public function is_email_unique($email)
  {
    return $this->User->get_one_by_email($email) ? FALSE : TRUE;
  }  

  public function is_username_unique($username)
  {
    return $this->User->get_one_by_username($username) ? FALSE : TRUE;
  }
}
我的班级:

class Auth extends MY_Controller 
{
      // Implement trait in class
  use User;

  public function __contstruct()
  {
    parent::__contstruct();
  }

  public function register()
  {
    if ($this->input->is_post()) {

        // load validation library
        $this->load->library('form_validation');

        //set validation rules
        $this->form_validation->set_rules('username', "Username", 'required|callback_username_check');

        // There I use my trait method callback_is_email_unique
        $this->form_validation->set_rules('email', "Email", 'required|valid_email|callback_is_email_unique');
        $this->form_validation->set_rules('password', "Password", 'required|matches[confirm_password]|min_length[6]');
        $this->form_validation->set_rules('confirm_password', "Confirm password", 'required');

  ...
 }
}
我的作曲家文件:

{    
    "autoload": {
        "psr-0": {
            "User": "Validation"
        }
    }
}

我现在用PHP5.5.3来回测试了一段时间,虽然我不得不报告在测试过程中出现了问题(更有可能是因为我在短时间内生成了一个版本为该版本的虚拟机,没有设置和wronk键盘布局),但最终我无法重现错误。我认为traits的自动加载就像广告宣传的那样有效

下面是我所做的:

在主目录中:

composer.json

{
    "autoload": {"psr-0":{"User":"src"}}
}
此外:

运行
composer install
创建
vendor/composer/autoload_namespace.php
,使用以下数组项:

'User' => array($baseDir . '/src'),
执行testscript对我来说很有用

请注意,正确命名文件非常重要。它们必须根据PSR-0规则(或者PSR-4,如果您更喜欢使用名称空间)进行精确匹配,包括区分大小写的正确文件名

如果您有一个名为“User”的特性,并且您将PSR-0自动加载定义为“User”:“Validation”,那么预期的情况是存在以下文件:
Validation/User.php
,其中包含以下内容:

<?php

trait User {
    // stuff here
}

你能发布一些你正在使用的代码吗?发布一个不起作用的小例子,准确地说出你所看到的表明它不起作用的东西。trait与类的加载方式相同。您可以生成一个类映射,或者使用PSR样式。这并不能像您定义的那样解决。
PSR-0
选项接受
“NS Prefix”:“Path”
假设您的源目录是
Validation
要加载trait
\User
您需要
:“Validation”
Hmmz,但是如果我尝试使用相同的配置请求类,这可以正常工作,但不能使用trait?因此Steve Buzonas您的假设是不正确的,因为如果我将trait关键字更改为class并请求该类系统正常工作。感谢您提供有关编写器和自动加载trait的详细说明。这是一个来自谷歌搜索结果的问题,我相信这与我遇到的问题有关,所以我悬赏了。事实证明,我的web服务的php.ini允许使用短标记,而我的CLI php.ini则不允许,所以有一个

'User' => array($baseDir . '/src'),
<?php

trait User {
    // stuff here
}