オートローダーを含む小さな MVC フレームワークで PHP ActiveRecord を使用しています。私のコントローラーでは、たとえばモデル Pub::find(64) にアクセスします。
私の問題は、Pub::find(64) がコントローラーの名前空間を継承していて、エラーが発生することです。
Fatal error: Class 'App\Controllers\Pub' not found in /home/i554246/public_html/mvc/App/Controllers/Index.php on line 27
Pub はモジュール名です。ファイルは正常に含まれます。\Pub::find(64) を追加することでこの問題を解決できますが、これはプロジェクトの新しい人にとっては直感的ではありません。
その行を変更せずに、Pub::find(64) の名前空間の追加を停止する方法はありますか?
インデックス コントローラー
namespace App\Controllers;
class Index extends \Core\Controller
{
protected
$title = 'Home'
;
/**
* Default action
*/
public function index()
{
// Pass the data to the view to display it
$this->view->set('testdb', \Pub::find(64));
}
}
App.php
/**
* Class autoloader
* @param $className
* @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
*/
public function autoload($className)
{
preg_match('/(^.+\\\)?([^\\\]+)$/', ltrim($className, '\\'), $match);
//Build namespace Autoloading
$file = str_replace('\\', '/', $match[1]) . str_replace('_', '/', $match[2]) . '.php';
//Build Model path
$model = 'App/Models/' . $match[2] . '.php';
if ( is_file($file) ) {
require $file;
}elseif ( is_file($model) ) {
require $model;
}
}
モデル/Pub.php
class Pub extends ActiveRecord\Model
{
}