-
Notifications
You must be signed in to change notification settings - Fork 2k
Closed
Description
Related: #7694
When we load a class in non-App namespace ('Acme\Blog\Models\UserModel') with 'preferApp' => false,
and load a class which has the same short name ('UserModel' or 'App\Models\UserModel') with 'preferApp' => true,
the instance in non-App namespace will be returned.
preferApp | boolean | Whether a class with the same basename in the App namespace overrides other explicit class requests.
https://codeigniter4.github.io/CodeIgniter4/concepts/factories.html#factories-options
Steps to Reproduce
--- a/app/Config/Autoload.php
+++ b/app/Config/Autoload.php
@@ -42,6 +42,7 @@ class Autoload extends AutoloadConfig
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
+ 'Acme\Blog' => ROOTPATH . 'acme/Blog',
];
/**<?php
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model
{
protected $table = 'users';
}<?php
namespace Acme\Blog\Models;
class UserModel
{
}<?php
namespace App\Controllers;
use CodeIgniter\Config\Factories;
class Home extends BaseController
{
public function index()
{
$users1 = Factories::models('Acme\Blog\Models\UserModel', ['preferApp' => false]);
$users2 = Factories::models('UserModel', ['preferApp' => true]);
return get_class($users1) . ', ' . get_class($users2);
}
}Results:
Acme\Blog\Models\UserModel, Acme\Blog\Models\UserModel
Metadata
Metadata
Assignees
Labels
No labels