@kirill-93

Вопросы по организации кода в Laravel?

Здравствуйте!
Появилось несколько вопросов в процессе разработки.
В app создал две директории Classes и Interfaces. В Classes создаю свои классы, которые имплементируют соответствующие интерфейсы. Классы могут быть сгруппированы в поддиректориях внутри директории Classes. В контроллерах подключаю и вызываю методы нужных классов.
//Class
class Gibhub implements VCSInterface
{
    public function getRepositories(string $author) array
    {
        $response = Http::get('api.github.com/...')->json();

        if (!isset($response['key']) {
            throw new Exception('Not found');
        }

        return $response;
    }
}

//Controller
private $github;

public function __construct(App\Classes\Github $github) 
{
    $this->github = $gibhub;
}

public function get(string $author) 
{
    try {
        $repository = $this->github->getRepositories($author);
    } catch (Exception $e) {
        return response()->json([
            'status' => $e->getStatus(),
            'message' => $e->getMessage()
        ]);
    }

    return response()->json($repository);
}


1) Правильно ли организован код?
2) Я в методе getRepositories в классе Github выбрасываю исключение по условию, а в контроллере вызываю этот метод и оборачиваю его в try-catch. PhpStorm при этом подсвечивает команду "throw new Exception" с комментарием "Unhandled Exception". PhpStorm вроде только дельные комментарии выводит, может так не принято код писать?
3) Нужно ли указывать тип возвращаемых значений у методов контроллеров?
public function get(string $author) object
{
    ...
    return response()->json($repository);
}


Спасибо.
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vism
Тут слишком мало, чтоб говорить прям вот точно. Но в целом верно.
Едиственное, если вам нужен exception чтоб сообщать пользователю, то лучше создать свой Exception и отлавливать его.
Другими словами, если мы не хотите возвращать в качестве ответа внутреннюю ошибку, что лучше разгранисить
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы