Аксиос пост запрос на отказ от реагировать передний конец фреймворк Laravel и MySQL

Аксиос пост запрос на отказ от реагировать передний конец фреймворк Laravel и MySQL

19.01.2020 09:20:54 Просмотров 22 Источник

я недавно начал изучать Laravel и всю структуру PHP бэкенда. Я пытаюсь сделать простой запрос post из формы, которую я сделал с React, и я хочу, чтобы он был сохранен в моей базе данных sql. Я уже создал модель, переношу таблицу в БД. Существует только одно поле, и это имя вставляется во входной текст. пока что это мой код.: форма реакции:

 import React, {Component} from "react";
import axios from "axios";

export default class App extends Component {
  constructor(props) {
    super(props);
    this.state= {
      name: ""
    }

    this.onSubmit= this.onSubmit.bind(this);
    this.onChange=this.onChange.bind(this);
  }

  onChange = e =>{
    this.setState({
      name: e.target.value
    })
  }
  onSubmit(e){
    e.preventDefault();
    const {name} = this.state;

    let data = {
      name: name
    };






        axios.post('/', data)
            .then(response => {
               console.log(data);

            })
            .catch(err => {
               console.log(err);

            })

};

  render() {
    return (
      <>
        <div>
          <form onSubmit={this.onSubmit}>
            <label>name</label>
         <input type="text"  onChange={this.onChange}></input>
         <button type="submit">submit</button> 
          </form>

    <h1>{this.state.name}</h1>

        </div>

      </>
    );
  }
}

Маршрут:

<?php

use Illuminate\Support\Facades\Route;

// The frontend is an SPA, so point all URIs (except /api/*) to the AppController.
Route::get('{uri?}', 'AppController@app')->where(['uri' => '^(?!api).*$'])->name('app');






Route::post('/', 'StoreDataCOntroller@store');


?>

Мой контроллер:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Form;

class StoreDataCOntroller extends Controller
{
    public function store(){
        $data = new Form();

        $data->name = request('name');


        $data->save();
    }
}

Модель (пустая):

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Form extends Model
{
    //
}

а миграция:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateFormsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('forms', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string("name");
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('forms');
    }
}

мой env файл:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:ZJmPVhi6byB/kzZt/IEyEBFYK3QUVc6b+65ITHDo/pM=
APP_DEBUG=true
APP_URL=http://localhost:8080

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=test
DB_PASSWORD=ciaoss

Теперь, когда в react input я нажимаю submit, у меня будет общая ошибка "internal server error 500". Что я делаю не так? спасибо за помощь :)

РЕДАКТИРОВАТЬ: Информация журнала ошибок

[previous exception] [object] (PDOException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' at C:\\xampp\\htdocs\\dev-test\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:453)
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql#comment105767790_59813045
можете ли вы опубликовать полный вывод laravel.ошибка журнала?

Ответы - Аксиос пост запрос на отказ от реагировать передний конец фреймворк Laravel и MySQL / Axios post request failure from React front end to Laravel and mysql

Vladan

19.01.2020 10:19:05

Проблема в том, что по умолчанию Laravel ожидает, что поля timestamps (created_at и updated_at) будут созданы путем миграции. Это оставляет вам два варианта

  1. Скажите модели, что нет никаких временных меток

    class Form extends Model
    {
        public $timestamps = false;
    }
    
  2. Добавьте к вашим меткам времени миграции

class CreateFormsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('forms', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string("name");
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('forms');
    }
}

Кроме того, в контроллере функция должна возвращать некоторый ответ.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Form;

class StoreDataCOntroller extends Controller
{
    public function store(){
        $data = new Form();

        $data->name = request('name');


        $data->save();
        return response()->created();
    }
}
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105765796_59813542
я попытался, но все равно получил ошибку. Вот что они говорят в консоли.журнал : `` ошибка: не удалось выполнить запрос код состояния 500 в createError (createError.ДШ:16) по урегулированию (урегулировать.js: 17) в XMLHttpRequest.handleLoad (технология XHR.js: 61)"`
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105766387_59813542
Вам нужно проверить логи на уровне PHP. Обычно он находится в хранилище / журналы / laravel.войдите, Откройте этот файл и посмотрите внизу, что показывает ошибка.
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105767725_59813542
№40 C:\\Users\\leont\\Desktop\\dev-test-master\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.РНР(105): загорается\\производство\\производство->загорается\\производство\\{закрытие}(объект(загорается\\НТТР\\запрос)) #41 C:\\Users\\leont\\Desktop\\dev-test-master\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.РНР(151): загорается\\производство\\производство->затем(объект(закрытие)) #42 C:\\Users\\leont\\Desktop\\dev-test-master\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(1
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105767902_59813542
Там определенно что-то есть, но, к сожалению, полное сообщение об ошибке обрезано. Смотрите, если вы можете получить полное сообщение об ошибке или просто использовать что-то вроде pastebin, чтобы поделиться содержимым файла
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105767933_59813542
Большое спасибо за вашу помощь: pastebin.com/GRH9dYc8
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105768003_59813542
Добавьте public $timestamps = false в вашу модель, извините, что не на компьютере прямо сейчас
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105768021_59813542
laravel.com/docs/5.8/eloquent часть временных меток
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105768166_59813542
Спасибо я попробую сейчас
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59813542#comment105768454_59813542
я попытался, но это также не исправило проблему. Для меня есть что-то, когда я размещаю данные от axios внутри маршрута "/". Я уверен, что этот маршрут get вызывает проблемы: / / интерфейс является SPA, поэтому укажите все URI (кроме / api/*) на AppController. Маршрут:: get ('{uri?} ', 'AppController@app') - > where (['uri'=>>' ^(?!прикладной программный интерфейс).*$'])- >имя ('app');
Jacob Hyde

20.01.2020 01:40:50

Как видно на вашем Ларавеле.журнал, у вас есть ошибка: столбец не найден: 1054 неизвестный столбец "updated_at" в "списке полей"

В вашей модели формы вы должны установить

public $timestamps = false;
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59815069#comment105768559_59815069
Но я не установил в миграциях никакого поля с отметками времени. У меня есть только поле имени. Я начал с одного поля только для тестирования
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59815069#comment105768852_59815069
Laravel предполагает, что каждая таблица имеет метки времени, даже если они не находятся в вашей миграции. Поэтому вам все равно нужно отключить их с помощью кода, приведенного выше в вашей модели.
https://stackoverflow.com/questions/59813045/axios-post-request-failure-from-react-front-end-to-laravel-and-mysql/59815069#comment105779760_59815069
Большое спасибо, я добавил в миграцию, и теперь это работает. Спасибо снова :)
Закрыть X