如何通过composer autoload加载特征

时间:2014-03-17 15:48:55

标签: php composer-php autoload traits

我尝试将我的traits文件夹添加到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"
        }
    }
}

1 个答案:

答案 0 :(得分:5)

我现在用PHP 5.5.3来回测试了一段时间,虽然我必须报告在测试期间看起来很糟糕(更可能是因为我在短时间内生成了具有该版本的VM,没有设置和wronk键盘布局),到底我无法重现错误。我说自动加载特征就像宣传的一样。

现在我就是这样做的:

在主目录中:

composer.json

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

此外:

test.php

<?php

require "vendor/autoload.php";

class Auth {
    use User;
}

new Auth;

在目录src中:

src/User.php

<?php

trait User {}

使用此数组条目运行composer install创建vendor/composer/autoload_namespaces.php

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

执行测试脚本对我有用。

请注意,正确命名文件非常重要。它们必须完全符合PSR-0规则(如果您更喜欢使用命名空间,则为PSR-4),包括区分大小写的正确文件名。

如果您有一个名为&#34; User&#34;的特征,并且您定义了PSR-0自动加载,例如&#34;用户&#34;:&#34;验证&#34;,预期的情况将是存在以下文件:Validation/User.php,内容为:

<?php

trait User {
    // stuff here
}

此特征可在至少运行一次composer install后自动加载。