我有一个简单的模式,有一个索引方法从数据库中获取数据
模态:国家
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Nation extends Model{
function index(){
Nation::where(['visible'=>1])->get();
}
}
现在我想从控制器调用这个函数:
控制器:
$nations = Nation::index();
为此,我以这种方式创建了一个正面:
第1步-提供商:
php artisan make:提供者NationServiceProvider
public function register() {
$this->app->bind('nation',function(){
return new Nation();
});
}
第2步:在config/app.php中注册提供程序
在提供者数组中:
App\Providers\NationServiceProvider::class,
步骤3创建立面
我创建了一个文件夹应用程序/Facades/和文件内的国家acade.php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class NationFacade extends Facade{
protected static function getFacadeAccessor(){
return 'nation';
}
}
步骤4:在config/app中注册别名。php
在别名数组中:
'Nation' => App\Facades\NationFacade::class
但是,当我运行控制器时,我得到了错误:
"message": "Non-static method App\\Models\\Nation::index() should not be called statically",
我还尝试清除缓存和作曲家转储。我在这里错过了什么?
谢谢你的建议!
只有您需要更改“公共”为“静态”
AFAIK,当您使用没有命名空间的类时,php假定该文件应该与当前文件位于同一目录。只有当它找不到时,它才调用__autoload
魔术方法。Laravel的/Composer的解析逻辑位于__autoload
方法中(这是Laravel解析您注册的别名的地方)。
在您的例子中,php检测到一个同名的类驻留在其范围内,因此它会尝试使用它。
解决方案是
>
将别名更改为非当前目录的某个类。在这种情况下,您已经为外观命名了不同的名称,因此只需使用该名称即可
// Register alias
'NationFacade' => App\Facades\NationFacade::class
// Call it like
NationFacade::index()
或
// Import
use App\Facades\NationFacade
// Call it like
NationFacade::index()
使用php的命名空间和别名而不是Laravel的别名(我不能100%确定这是否有效)
// Import the facade
use App\Facades\NationFacade as Nation;
// Call it like
Nation::index()
如果您仍有疑问,请随时在下面发表评论
我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码:
我最近对 PHP 5.4 进行了更新,但收到有关静态和非静态代码的错误。 这是错误: 这是第371行: 我希望有人能帮忙。
我一直试图用我的验证代码进行php pear验证,但我收到的都是严格标准错误--问题是什么?我如何修复它? 电子邮件验证.php
PHP严格标准:不应在第33行的/web/sites/blah/somescript.PHP中静态调用非静态方法pear::iserror() 我在MDB2上看到了类似的错误。稍后再详细介绍。 somescript.php: 问题 是否有不同的方法来调用而不会产生错误?
我正在尝试在varGrant CentOS VM上本地运行一个codegniter站点。我已经下载了所有文件,并设置了yaml/host文件等。 我在屏幕上看到这个错误。 遇到 PHP 错误 严重性:8192 消息:非静态方法 MY_Loader::d efine_module() 不应静态调用,假设$this来自不兼容的上下文 文件名:controllers/Front _ controller
我正在努力得到一个用户的基础上,他的id或电子邮件后,他登录通过一个表单。这个函数是在user.class.php中定义的,我想在另一个名为profile.php的php文件中调用它,但它仍然给我带来语法错误,我不知道如何修复它。 错误:不推荐使用:不应静态调用非静态方法User::GetUserId()注意:未定义变量:email in 使用getters和setters,函数 下面是profi