Я новичок в среде Laravel и пытаюсь создать инструмент для управления базой данных. Я уже создал свою таблицу, и мне удается заполнить ее из представления, чего я не получаю, так это отображения таблицы обратно в представление. Я построил две функции: одну, которая просто отображает форму 'Project_create@showpform', а другую, которая должна обновлять то же представление с вставленными данными 'Project_create@showtable'. Получаю сообщение об ошибке: "Undefined variable: project_data (View:/var/www/tcc/src/resources/views/form_project.blade.php)".
Здесь вы можете увидеть мои маршруты:
Route::get('/', 'DataController@overview');
Route::get('/myproject', 'Project_create@showpform');
Route::post('/myproject', 'Project_create@showtable');
Route::get('/upload','DataController@showform');
Route::post('/upload', 'DataController@read_xsl');
Route::get('/scrape', 'DataController@scrape');
Вот мой контроллер Project_create:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
class project_create extends Controller
{
public function showpform()
{
return view('form_project');
}
public function showtable(Request $request)
{
$name = $request->input('name');
$description = $request->input('description');
\DB::table('projects')->insert(
[
'project_id' => 1,
'name' => $rawUrl,
'description' => $hashedUrl,
'created_at' => \Carbon\Carbon::now(),
]);
$project_data = \DB::table('projects')->select('*')->get();
return View::make('form_project', compact('project_data'));
}
}
И вот мой взгляд:
<html lang = "en">
<head>
<title>File Upload</title>
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel = "stylesheet" href = "https://www.w3schools.com/w3css/4/w3.css">
</head>
<body>
<div class = "container">
<h3 class = "jumbotron">Create here your project</h3>
<form class = "w3-container w3-light-grey" action = {{action('DataController@showform')}} enctype = "multipart/form-data">
{{csrf_field()}}
<p>
<label>Project Name</label>
<input class = "w3-input w3-border w3-round" name = "name" type = "text"></p>
<p>
<label>Project Description</label>
<input class = "w3-input w3-border w3-round" name = "description" type = "text"></p>
<button type = "submit" class = "btn btn-primary" style = "margin-top:10px">Create Project</button>
</form>
</div>
<table>
<thead>
<tr>
<th> id</th>
<th> name</th>
<th> description</th>
<th> created_at </th>
</tr>
</thead>
<tbody>
@foreach($project_data as $data)
<tr>
<td> {{$data->id}} </td>
<td> {{$data->name}} </td>
<td> {{$data->description}} </td>
<td> {{$data->created_at}} </td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>
Спасибо за помощь.






У вашего взгляда есть линия
@foreach($project_data as $data)
но когда ты звонишь
public function showpform()
вы не проходите в
$project data
как в
public function showtable(Request $request)
....
return View::make('form_project', compact('project_data'));
В файле Blade добавьте функцию isset. например
@if (isset($project_data))
@foreach($project_data as $data)
<tr>
<td> {{$data->id}} </td>
<td> {{$data->name}} </td>
<td> {{$data->description}} </td>
<td> {{$data->created_at}} </td>
</tr>
@endforeach
@endif
Спасибо за статус
@if, он решил мою проблему. Вpublic function showpform()я не просто добавил$project data, ноreturn view('form_project', [ 'project_data' => \DB::table('projects')->select('*')->get(), ]);таким образом работал!