我尝试将我的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"
}
}
}
答案 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
后自动加载。