laravel-5.7: данные не сохраняются в базе данных, объект не найден - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь сохранить данные в БД, но он не сохраняется и говорит, что объект не найден, может кто-нибудь предложить мне решение, я следую этому уроку: https://laracasts.com/series/laravel-from-scratch-2018/episodes/10

контроллер:

public function index()
{
    $projects = Project::all();

    return view('projects.index', compact('projects'));
}

public function create()
{
    return view('projects.create');
}

public function store()
{
    $project = new Project();
    $project->title = request('title');
    $project->description = request('description');
    $project->save();

    return redirect('/projects');
}

маршруты:

Route::get('/projects','ProjectsController@index');
Route::post('/projects','ProjectsController@store');
Route::get('/projects/create','ProjectsController@create');

create.blade.php:

<form method="POST" action="/projects">
    {{ csrf_field() }}
    <div>
        <input type="text" name="title" placeholder="Project title">
    </div>
    <div>
        <textarea name="description" placeholder="Project description"></textarea>
    </div>
    <div>
        <button type="submit">Create Project</button>
    </div>
</form>

index.blade.php:

@foreach($projects as $project)
    <li>{{ $project->title }}</li>
@endforeach

Ответы [ 2 ]

3 голосов
/ 10 марта 2019

Вы пропустили передачу параметра запроса в хранилище контроллера ()

public function store(Request $request)
{
    $project = new Project();
    $project->title = $request->title;
    $project->description = $request->description;
    $project->save();
    return redirect('/projects');
}

И также не забудьте включить use Illuminate\Http\Request; над (внешним) классом контроллера.

1 голос
/ 10 марта 2019

Код Laravel, который вы разместили, является правильным на правильно настроенном веб-сайте.Ошибка из ваших комментариев:

Объект не найден!Запрашиваемый URL не найден на этом сервере.Ссылка на ссылающейся странице кажется неправильной или устаревшей.Пожалуйста, сообщите автору этой страницы об ошибке.Если вы считаете, что это ошибка сервера, обратитесь к веб-мастеру.Ошибка 404 localhost Apache / 2.4.33 (Win32) OpenSSL / 1.1.0h PHP / 7.2.7

представляет собой страницу ошибки Apache , что означаетэто вовсе не запрос страницы из вашего проекта laravel.Данные, вероятно, сохраняются в вашей базе данных, но затем вы перенаправляете на страницу, которая находится за пределами вашего проекта, и Apache не может ее найти.

Ваш веб-сайт расположен по адресу http://localhost/laravel/public, что означает, что вам нужнодля доступа к странице проектов на http://localhost/laravel/public/projects.Однако redirect('/projects') дает вам абсолютный путь вместо относительного пути, отправляя вас на http://localhost/projects, который не существует.

Решения

Поскольку это локальный проект разработки, я собираюсь пропустить проблемы с неправильной конфигурацией Apache и сосредоточиться на других способах избежать ошибки.

Вариант 1

Использование именованный маршрут :

Route::get('/projects','ProjectsController@index')->name('projects.index');

и использовать имя маршрута для перенаправления:

return redirect()->route('projects.index');

Этот должен генерировать правильные URL-адреса в пределахваш проект.

Опция 2

Используйте serve для разработки вместо Apache.

Откройте терминал в каталоге вашего проекта Laravel и выполните эту команду:

php artisan serve

Это запустит встроенный веб-сервер PHP на http://localhost:8000,, полностью пропуская Apache.Во время разработки это прекрасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...