我对Laravel很新。 我没有数据库连接,但我试图将控制器中的逻辑分开放置在模型中,以便创建胖模型和超薄控制器。
在做这件事时,我意识到我必须在不同的模型中使用常用功能。我已经看到他们通常将这些类放在<?php
//in app/lib/MyLog.php
class MyLog{
//whatever
}
中,但我想这只是控制器才能访问它们?我似乎无法从m模型访问它们:
//in a model
MyLog::setLogApi($url);
然后在m模型中:
{{1}}
我得到的错误:
PHP致命错误:在第80行的C:\ inetpub \ wwwroot \ laravel \ app \ models \ Overview.php中找不到类'MyLog'
答案 0 :(得分:1)
如果您在控制器use App\MyLog;
然后你应该在MyLog.php
app\MyLog.php
个文件
更新:由于OP希望从任何模型中访问某些常用功能
然后Mutators应该帮助你做到这一点
这是在那里给出的类似例子
public function convertToLower($value)
{
$this->attributes['yourLowerString'] = strtolower($value);
}
答案 1 :(得分:0)
确保您的模型具有命名空间。如果您的MyLog
类具有名称空间,例如:
<?php namespace App\Logging;
class MyLog {
}
然后你可以在你的控制器中调用它,如下所示:
<?php namespace App\Controllers;
use App\Logging\MyLog as MyLog;
class MyController {
protected $logger;
public function __construct() {
$this->logger = new MyLog;
}
}
您可能必须执行composer dump-autoload
。这会将名称空间和类映射到正确的文件。
答案 2 :(得分:0)
您应该使用名称空间,这是现代PHP的好习惯。
文件app / lib / MyLog.php
namespace App\Lib;
class MyLog {
// class functions
}
文件/app/models/Overview.php
namespace App\Models;
use App\Lib\MyLog;
class Overview {
// class functions
}
您可以对完全命名空间的类使用短别名。别名存储在/app/config/app.php中,查找部分
"aliases" => array(
'App' => 'Illuminate\Support\Facades\App',
.
.
. );
在数组末尾添加MyLog类的新别名:
'MyLog' => 'App\Lib\MyLog'
现在在你的/app/models/Overview.php中你可以使用更短的别名:
namespace App\Models;
use MyLog;
class Overview {
// class functions
}