У меня в callsController есть два метода. Первый называется newCall и отображает все записи из таблицы БД, он выглядит так:
public function newCall(){
$new_calls = new_calls::all(); //fetches everything in the new_calls table in the database
return view('calls.newCall')->with('new_calls', $new_calls); //passes it to the view
}
Эта функция работает хорошо, и, на мой взгляд, все записи успешно извлечены.
Проблема связана со вторым методом viewCall, целью которого является отображение данных для одного call при щелчке по его имени в списке newCalls.
В настоящее время у меня есть только это:
public function viewCall(){
return view('calls.viewCall');
}
Я планирую форматировать данные из базы данных (для конкретного вызова) с помощью некоторого статического текста при отображении его в моем viewCall.blade.php.
Я не совсем понимал, что добавить в web.php, поэтому мои маршруты выглядят так:
Route::get('/calls/newCall', 'CallsController@newCall');
Route::get('/calls/viewCall/{id}', 'CallsController@viewCall')->name('viewCall');
Может ли кто-нибудь помочь мне сделать эту работу? Я просто хочу видеть ассоциативный массив с записью из базы данных, когда я нажимаю на имя вызова. Что мне нужно добавить в маршруты и на мой взгляд?
Это мой newCall.blade.php
<div class = "table-responsive">
<table class = "table no-margin table-striped">
<thead>
<tr>
<th>Terminal ID</th>
<th>Terminal Name</th>
{{-- <th>Fault Description</th> --}}
<th>Call Logged On</th>
<th>ATM Variant</th>
</tr>
</thead>
<tbody>
@if (count($new_calls) > 0)
@foreach($new_calls as $calls)
<tr>
<td><a href = "/calls/viewCall/{{$calls->id}}" title = "view more details">{{$calls->terminal_id}}</a></td>
<td>{{$calls->terminal_name}}</td>
{{-- <td style = "width:350px">{{$calls->fault_description}}</td> --}}
<td>{{$calls->created_at}}</td>
<td>{{$calls->atm_variant}}</td>
</tr>
@endforeach
@else
<h1>No new Calls</h1>
@endif
</tbody>
</table>
</div>
Это мой viewCall.blade.php
<address>
<strong>{{$new_call->client_name}}</strong><br>
{{$new_call->address}}<br>
<b>Phone: {{$new_call->phone}}</b> <br>
<b>Email: {{$new_call->email}}</b>
</address>
nb: я также пробовал использовать {{$calls->email}}, но он возвращает undefined variable: calls и new_calls в каждом случае
Добавьте ваши файлы newcall.blade.php и viewcall.blade.php, и я посмотрю на них.
Вы обновили функцию viewCall, как показано в моем ответе ниже?
да ... пожалуйста, просмотрите обновленную версию моего сообщения .. Я включил свой оператор foreach .. я все еще получаю сообщение об ошибке undefined variable calls






Вы можете сделать что-то вроде этого:
public function viewCall($id)
{
return view('calls.viewCall', ['call' => new_calls::findOrFail($id)]);
}
Это получит id из маршрута и вызовет функцию для поиска объекта с данным id.
Если у вас есть проблемы с переменной в представлении. Попробуйте проверить объект с помощью dd. Попробуй это:
public function viewCall($id)
{
$new_call = new_calls::find($id);
dd($new_call);
}
Ссылка: https://laravel.com/docs/5.7/controllers#basic-controllers
там нет ничего, кроме кодов HTML и CSS, но все они импортируются как верхние и нижние колонтитулы
Я надеялся просмотреть данные в необработанном состоянии, то есть в массиве, чтобы я мог настроить представление
Переменная, которая будет отправлена в viewCall, - это $call. В представлении вы можете получить атрибуты из этой переменной. Я отредактировал свой ответ отладочным кодом. Попробуйте проверить, правильно ли напечатан $ new_call.
он вернул следующие new_calls {# 234 ▼ #fillable: array: 6 [▶] #table: "new_calls" #connection: "mysql" #primaryKey: "id" #keyType: "int" + incrementing: true #with: [ ] #withCount: [] #perPage: 15 + exists: true + wasRecentlyCreated: false #attributes: array: 10 [▶] #original: array: 10 [▶] #changes: [] #casts: [] #dates: [ ] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] ... и другие}, но я хочу, чтобы он возвращал информацию о вызове, который я щелкнул в массиве
спасибо ... Я сделал несколько ошибок в своих именах переменных и исправил их ... мой код теперь работает .... большое спасибо ... я очень признателен
Я также рекомендую изучить соглашения об именах, привязку модели маршрута и подсказки типов в контроллере. Тогда получится что-то вроде этого:
public function viewCall(NewCall $newcall)
{
return view('calls.viewCall')->with($newcall);
}
и маршрут будет таким:
Route::get('/calls/viewCall/{newcall}', 'CallsController@viewCall')->name('viewCall');
спасибо за ответ, но там написано: «Класс App \ Http \ Controllers \ NewCall не существует»
Итак, где вы это сделали: $ new_call = new_calls :: find ($ id); new_calls - это ваш класс. Это плохое соглашение об именах. Ваша модель new_calls должна быть единственной. Думайте о модели как о 1 строке в БД. new_call :: allI () = все строки. new_fall :: find ($ id) == 1 строка. Я бы изменил свою модель на NewCall, но поскольку вы уже сделали это, вы уже можете сделать это: Открытая функция viewCall (new_calls, $ newcall) {return view ('calls.viewCall') -> with ($ newcall); }. Теперь вы намекаете, что $ newcall является экземпляром new_call. Это красноречиво.
спасибо ... Я сделал несколько ошибок в своих именах переменных и исправил их ... мой код теперь работает .... большое спасибо ... я очень признателен
@ Остин. На самом деле прочтите эти документы по laravel. Привязка модели маршрута и подсказка типа очень важны и помогают сохранить код чистым / читаемым, что будет иметь большое значение. Удачи тебе с твоим проектом.
Что вам нужно сделать, так это получить модель new_calls от ID. Что вы можете сделать так:
маршруты / web.php
Route::get('/calls/viewCall/{id}', 'CallsController@viewCall');
CallsController.php
public function viewCall($id) // the id in the url
{
$new_call = new_calls::find($id);
return view('calls.viewCall')->with('new_call', $new_call);
}
На ваш взгляд (я предполагаю, что вы просматриваете все вызовы, чтобы отобразить их) создайте ссылку.
// your existing foreach
@foreach($x as $y)
<a href = "/calls/viewCall/{{$y->id}}">View Call</a>
@endforeach
Вот что делает return view('calls.viewCall')->with('new_call', $new_call);. По вашему мнению, вы можете получить доступ к вызову следующим образом: $new_call с любыми свойствами.
Просто добавьте представление, в котором вы хотите разместить ссылку на страницу вызова, и я посмотрю на него.
Я попробовал <small class = "pull-right">Call logged on: {{$new_call->created_at}} </small> и получил ошибку undefined variable new_call
Вам следует использовать {{$new_call->created_at}}. Поскольку свойства передаются в представление как $new_call
Пожалуйста, добавьте все соответствующие просмотры в свой пост: viewcall.blade.php и тот, в котором у вас есть все звонки.
Другой вид, который мне нужно исправить, - это newcall.blade.php.
Я только что добавил просмотры ... пожалуйста, проверьте сообщение
спасибо ... Я сделал несколько ошибок в своих именах переменных и исправил их ... мой код теперь работает .... большое спасибо ... я очень признателен
Проверьте мой ответ ниже и скажите, работает он для вас или нет.