Требуется консультация: структура проекта для пространства имен приложения Laravel - PullRequest
1 голос
/ 18 февраля 2020

Я занимаюсь разработкой приложения, в котором есть две разграниченные по именам папки.

Допустим,

App/Http/Users/ и App/Http/Drivers/

У меня есть две настройки API-интерфейса api.php и dapi.php. Маршруты также начинаются с префиксов localhost/api/foo и localhost/dapi/bar соответственно.

Все работает нормально, но проблема в том, что есть некоторые методы, которые мне нужно вызвать для обоих. Например, сохранить информацию об адресе или позвонить. Прямо сейчас я должен сделать одинаковые контроллеры для обоих и скопировать много кода. Каков наилучший подход для такого проекта?

1 Ответ

1 голос
/ 18 февраля 2020

вы должны использовать признаки

Характеристики - это механизм для повторного использования кода в языках с одним наследованием, таких как PHP. Черта предназначена для уменьшения некоторых ограничений одиночного наследования, позволяя разработчику свободно повторно использовать наборы методов в нескольких независимых классах, находящихся в разных иерархиях классов. Семантика комбинации признаков и классов определяется таким образом, чтобы уменьшить сложность и избежать типичных проблем, связанных с множественным наследованием и миксинами.

, например:

в вашем traite:

    trait SameMethods {
        function call() { /*1*/ }
        function saveAddress() { /*2*/ }
    }

.

namespace App\Http\Drivers;

        class Foo extends Controller{
            use SameMethods ;
            /* ... */
        }

.

namespace App\Http\Users;

        class Bar extends Controller{
            use SameMethods ;
            /* ... */
        }

Теперь у вас есть эти методы на ваших контроллерах.

другой способ - это вы есть другой класс, например ParentController, расширенный от Controller, который содержит те же методы, а foo и bar расширяются из этого класса

ParentController extends Controller {
    function call() { /*1*/ }
    function saveAddress() { /*2*/ }
}

.

namespace App\Http\Drivers;

        class Foo extends ParentController {

            /* ... */
        }

.

namespace App\Http\Users;

        class Bar extends ParentController {

            /* ... */
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...