Я делаю инструмент управления проектами, чтобы изучить Laravel.
Прямо сейчас у меня есть 2 модели для проекта и задачи, и я установил связь между ними:
Проект:
public function task()
{
return $this->hasMany(Task::class);
}
Задача:
public function project()
{
return $this->belongsTo(Project::class);
}
Они работают нормально, я вижу правильные результаты в php artisan tinker
, но сейчас я жестко кодирую, к какому проекту принадлежат все задачи.
На данный момент я создал, работаю, формы, которые создают обе эти вещи независимо, но теперь я знаю, как связать их вместе, как это сделал бы профессиональный разработчик.
Единственное решение, которое я могу придумать, - это иметь раскрывающийся список в представлении createTask
, заполненный всеми проектами, которые в настоящее время работают. Это не кажется очень элегантным и не похоже, как с этим справился бы настоящий разработчик. Мне кажется, что создание задачи в этом смысле должно быть правильно увязано с проектом?
@NMahurin да, это моя проблема, у меня нет опыта, чтобы знать разумный способ структурировать мой проект. Я думаю, возможно, ссылка в представлении Project
, которая направляет на такой маршрут, как Route::get('/task/create/{projectid}', 'TaskController@create')
или что-то в этом роде, поэтому у меня всегда есть идентификатор проекта, связанный с созданием задачи.
Это был бы хороший способ сделать это. У вас будет доступ к проекту в вашем контроллере, который вы можете передать в форму. Если вы еще этого не сделали, найдите скрытые входы. Иногда они могут быть быстрым способом опубликовать дополнительные данные. Я больше ими не пользуюсь (так как вы научитесь лучше разбираться в структуре / маршрутизации с большим опытом), но они могут стать началом.
Пользовательские интерфейсы сложны. Нет серебряной пули в том, как правильно обращаться с этими вещами. Крупные компании собирают тонны данных, прежде чем они действительно решат, какой пользовательский интерфейс наиболее удобен для их пользовательской базы ... и даже тогда они все равно часто ошибаются. Эмпирическое правило - «как бы Google это сделал». Обычно это хорошее начало
Похоже, вы на правильном пути, и я думаю, что это больше вопрос того, как вы хотите, чтобы ваше приложение работало.
Описанный вами подход - это один из способов достижения этой цели, и он подходит для представления «все проекты», когда приложение не знает, на какой проект пользователь собирается назначить задачу.
Другой вариант - создать представление «редактировать проект», в котором отображается информация только для одного проекта. На этот раз, поскольку вы знаете идентификатор проекта, в который будет добавлена задача, вместо отображения раскрывающегося списка вы можете использовать скрытый элемент формы для передачи идентификатора.
В зависимости от интерфейса могут быть подходящими оба метода.
Как бы вы ни пытались это сделать, задача должна будет знать, на какой проект она назначена. Если вы уже знаете, что эта информация входит в представление createTask, вам не понадобится раскрывающийся список, вы просто публикуете информацию о проекте вместе с информацией о задаче. Вы можете использовать скрытую форму, отправить uuid проекта в маршрут и т. д. Если вы не знаете, к какому проекту принадлежит задача, то как изменится ваш код, если вы не разрешите вводить его в форму?