Я хочу создать приложение, которое напоминает вам об истечении срока действия вашей страховки, и я хочу получить доступ к данным из моей базы данных, чтобы создать форму редактирования и заполнить поля этими данными. У меня есть эта функция в InsurancesController:
public function edit($insurance)
{
$insurance = Insurance::whereId($insurance)->first();
return response() -> json([
'insurance' => $insurance
]);
}
У меня есть этот маршрут:
<Route path = "/:id/edit" exact render = {props => (
<EditInsurance {...props} insurances = {this.state.insurances} />)}
/>
и у меня есть этот компонент, просто для тестирования:
import React, { Component } from "react";
class EditInsurances extends Component {
render() {
const { insurances } = this.props;
return (
<div>
<p>Hello</p>
{insurances.map(insurance => (
<p>{insurance.id}</p>
))}
</div>
);
}
}
export default EditInsurances;
Как мне получить доступ только к той страховке, которую я хочу отредактировать?
Редактировать
Это то, что я получаю, когда использую почтальон для:
{
"insurance": {
"id": 5,
"user_id": 1,
"tip": "Asigurare",
"date_exp": "1975-12-28",
"date_notif": "2006-06-19",
"note": "Vitae dolorem corporis impedit eligendi laborum quidem.",
"created_at": "2019-03-11 09:49:23",
"updated_at": "2019-03-11 09:49:23"
}
}
Я хочу получить доступ к данным, которые я отправляю в контроллере (json), на мой маршрут редактирования
Можете ли вы опубликовать, какие данные вы отправляете по запросу?
Вот что я получаю, когда использую почтальона для: напоминания.test/api/insurances/5/edit: { "insurance": { "id": 5, "user_id": 1, "tip": "Asigurare", "date_exp": "1975-12-28", "date_notif": "2006-06-19", "note": "Vitae dolorem corporis impedit eligendi laborum quidem.", "created_at": "2019-03-11 09:49:23", "updated_at": "2019-03-11 09:49:23" } }
Я обновил пост, чтобы его было легче читать
попробуйте изменить метод edit() вашего контроллера на это: public function edit(Request $request) { $insurance_request = json_decode($request->get('insurance')); $insurance = Insurance::find($insurence_request->id); return response()->json($insurance) }
чтобы использовать приведенный выше код, убедитесь, что у вас есть use Illuminate\Http\Request в верхней части вашего контроллера.
Это единственное, что я должен изменить? Если да, то ничего не изменилось...
Теперь вы можете правильно получить доступ к данным, отправленным на контроллер, не так ли? Какой ответ показывает вам Почтальон?
Попытка получить свойство 'id' не объекта
Но данные, которые я получил от почтальона, в первую очередь были правильными.
О, извините, я думал, вы сомневаетесь в том, что не сможете получить данные на серверной части. Я испортил это.
Все в порядке, все равно спасибо. Любая помощь приветствуется: D





Вы можете взять из маршрута ID страховки, которую хотите отредактировать.
Затем переберите все страховки и сравните с идентификатором из маршрута.
class EditInsurances extends Component {
render() {
const { insurances } = this.props;
// get from url-route ID
const insuranceId = this.props.match.params.id;
const insurance = insurances.map(insurance => insurance.id === insuranceId)
return (
<div>
<p>Hello</p>
{insurance}
</div>
);
}
}
я понял: Line 8: 'insurances' is not defined no-undef
Вы должны получить от реквизита страховки, как это, верно? const {страховки} = this.props;
Я обновил ответ с помощью const {insurances} = this.props; Попробуй сейчас.
Теперь я не получаю никаких ошибок, но отображается только сообщение «Привет».
console.info('insuranceId', insuraceId) и console.info('insurances', Insurances) Консоль записывает их перед return() Чтобы проверить, получаем ли мы список страховок и как этот список выглядит. И если мы получим этот список. Нам нужно знать, есть ли у нас страховой идентификатор от «маршрута», возможно, это проблема. дайте мне знать, какую ценность вы получите.
Я получаю все страховки, но для InsuranceId я получаю только {insuranceId}, а не число
можете ли вы записывать в консоль также this.props.match.params.id; и дайте мне знать, что вы получите
Я думаю, что проблема на моей странице шоу. Чтобы попасть на страницу редактирования, у меня есть <Link>: <Link to = "/{insurance.id}/edit" className = "btn btn-sm btn-warning" > EDIT </Link>
Ладно, я понял. Ссылка была проблемой, вместо этого я должен был использовать <Link to = {"/" + Insurance.id + "/edit"} .... </ Link> Теперь я получаю нужный мне идентификатор, но отображение то же самое, только привет
Хорошо, это сработало, большое спасибо. У меня только одна проблема. Несмотря на то, что insurance.id и insuranceId имеют одинаковое значение, if не работает. Я сделал оператор if для проверки, и это возвращает false для каждого сравнения: const insurance = insurances.map(function(insurance) { if (insurance.id === insuranceId) return "true"; else return "false"; })
Вы должны быть яснее в своих сомнениях. Разместите более подробную информацию.