Я использую некоторый полиморфизм базы данных, чтобы соединить отношения между таблицами через красноречивый / laravel. (ПРИМЕЧАНИЕ, приведенный ниже пример был упрощен, два объекта уже расширяют базовый класс, поэтому я не могу расширить другой, который реализовывал бы нужное мне поведение, базовый класс, который они расширяют, используется совместно с другими классами, которые не связаны с тем, что я пытаюсь сделать ниже)
class Pageable{
public function table() {
return $this->morphTo();
}
}
class User {
public function pageable() {
return $this->morphOne('Pageable', 'table');
}
public function returnUrl() {
return "http://...";
}
}
class Company {
public function pageable() {
return $this->morphOne('Pageable', 'table');
}
public function returnUrl() {
return "http://...";
}
}
Я перебираю pageable и затем могу получить либо объект User, либо Company, однако мне нужна общая функция, такая как returnUrl, которую я могу вызывать для любого из объектов, которые могут быть преобразованы в это отношение. Есть ли способ очистить это выше или, по крайней мере, создать несколько отказоустойчивых проверок, чтобы убедиться, что все необходимые методы реализованы в классе, если, например, они реализуют PeageableInterface. Например, могу ли я установить в интерфейсе требование, чтобы эта функция returnUrl была обязательной?
Как мне создать такой интерфейс?