我使用的是Laravel4附带的用户类。我试图存储一个属于用户的新问题,用户需要登录才能创建。当我调用questions controller action store时,我得到以下错误
Class User contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Illuminate\Auth\UserInterface::getAuthPassword, Illuminate\Auth\Reminders\RemindableInterface::getReminderEmail)
我读过一些关于PHP中抽象方法的文章,虽然我不完全理解它们,但错误本身给出了问题的两种解决方案,声明实现剩余方法的类抽象。我猜测,由于这是laravel附带的模型类,正确的解决方案不是将其声明更改为抽象,而是实现其余的方法。在这种情况下,我如何正确地做这件事?
用户模型
<?php
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends BaseModel implements UserInterface, RemindableInterface {
protected $guarded = [];
public static $rules = array(
'username' => 'required|unique:users|alpha_dash|min:4',
'password' => 'required|alpha_num|between:4,8|confirmed',
'password_confirmation'=>'required|alpha_num|between:4,8'
);
public function Questions($value='')
{
return $this->hasMany('Question');
}
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password');
/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->getKey();
}
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->password;
}
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail()
{
return $this->email;
}
}
问题控制员
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function postStore()
{
$validation = Question::validate(Input::all());
if($validation->passes()) {
Question::create(array(
'question'=>Input::get('question'),
'user_id'=>Auth::user()->id
));
return Redirect::Route('home')
->with('message', 'Your question has been posted.');
} else {
return Redirect::to('user/register')->withErrors($validation)
->withInput();
}
}
编辑1:错误消息包括“(Illumb\Auth\UserInterface::getAuthPassword,Illumb\Auth\Employers\EmployableInterface::GetEmployereMail)”这两个方法在我的用户中。正如您在上面看到的,php是公共函数,所以我是否需要做一些其他事情来“实现”它们?
编辑2:
Laravel Src用户接口类
<?php namespace Illuminate\Auth;
interface UserInterface {
/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier();
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword();
}
laravel src RemindableInterface类
<?php namespace Illuminate\Auth\Reminders;
interface RemindableInterface {
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail();
}
编辑3:
php。与错误报告相关的ini
; error_reporting
; Default Value: E_ALL & ~E_NOTICE
; Development Value: E_ALL | E_STRICT
; Production Value: E_ALL & ~E_DEPRECATED
error_reporting = E_ALL
; Eval the expression with current error_reporting(). Set to true if you want
; error_reporting(0) around the eval().
; http://php.net/assert.quiet-eval
;assert.quiet_eval = 0
基本模式类
<?php
class Basemodel extends Eloquent {
public static function validate($data) {
return Validator::make($data, static::$rules);
}
}
?>
编辑4;
在给出错误时添加正确的模型类,以及现在的修复情况
<?php
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class Question extends BaseModel implements UserInterface, RemindableInterface {
protected $guarded = [];
public static $rules = array(
'questions'=>'required|min:10|max:255',
//'solved'=>'in:0,1',
);
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'questions';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('');
/**
* Get the unique identifier for the question.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->getKey();
}
public function user()
{
return $this->belongsTo('User');
}
}
将此添加到修复
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->password;
}
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail()
{
return $this->email;
}
也许用一个例子来回答这个问题最简单。假设我有以下课程:
abstract class ClassB {
public abstract function foo();
}
class ClassA extends ClassB {}
$a = new ClassA();
运行此代码将导致以下错误:
Fatal error: Class ClassA contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (ClassB::foo)
这意味着我在ClassA
中缺少foo()
(在ClassB
中定义)的实现。抽象方法只能在抽象类中定义,这意味着任何非抽象派生类都必须公开完整的实现,而在这种情况下,ClassA
不会。可以通过将ClassA
更改为
class ClassA extends ClassB {
// implementation of abstract ClassB::foo().
public function foo() {
echo 'Hello!';
}
}
回到你的例子。您的User
类扩展了BaseModel
。根据BaseModel
是否扩展了另一个抽象类,它将包含两个定义为abstract
的方法,您的User
类缺少这两个方法。您需要找到这些方法—我的错误消息明确地告诉我缺少什么—并在User
中实现它们。
我得到下面的错误,而执行我的测试用例。我已经将TestNg Eclipse插件升级为6.11.0最新版本,并使用所有testng jars文件进行了尝试,没有运气来解决这个问题。 我是否遗漏了任何可以添加项目的内容,或者我该怎么做? 请有人帮助解决此错误: JAVAlang.AbstractMethodError:org。testng。遥远的支持RemoteTestNG6_9_10$Delegat
我在进行贝宝支付时出现了经验错误。 致命错误:未捕获异常“PayPal\exception\PayPalConnectionException”,消息为“访问https://api.sandbox.paypal.com/v1/payments/payment时获得Http响应代码400”。在C:\xampp\htdocs\paypal\workload\third_party\vendor\pay
我是Android的初学者。我正在开发一个应用程序。我收到这个问题,我不知道怎么做。 这是我在logcat中收到的信息:
错误为: 11-17 06:23:34.603 354 0-3540/com.example.ruiru.salestracker E/AndroidRuntime:致命异常:主进程:com.example.ruiru.salestracker,pid:3540 java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.ru
我遵循了《Laravel 5.3升级指南》,其中说在应用程序异常处理程序中添加一个未经验证的方法。 但是,当Auth系统调用它时,我得到以下错误: 处理程序中的FatalThrowableError。php第59行:类型错误:传递给App\Exceptions\Handler的参数2::unauthenticated()必须是App\Exceptions\AuthenticationExcepti