国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

laravel5.5 + react完成簡(jiǎn)單的CRUD

2501207950 / 3191人閱讀

摘要:完成簡(jiǎn)單的在這篇文章中,我想和大家分享如何在框架中使用來(lái)創(chuàng)建應(yīng)用程序。在這個(gè)例子中,您可以學(xué)習(xí)如何為應(yīng)用程序構(gòu)建設(shè)置,我還使用請(qǐng)求,獲取請(qǐng)求,放入請(qǐng)求和刪除請(qǐng)求來(lái)插入更新刪除應(yīng)用程序。

laravel5.5 + react完成簡(jiǎn)單的CRUD
在這篇文章中,我想和大家分享如何在PHP Laravel框架中使用js來(lái)創(chuàng)建crud(Create Read Update Delete)應(yīng)用程序。在這個(gè)例子中,您可以學(xué)習(xí)如何為laravel reactjs應(yīng)用程序構(gòu)建設(shè)置,我還使用axios post請(qǐng)求,獲取請(qǐng)求,放入請(qǐng)求和刪除請(qǐng)求來(lái)插入更新刪除應(yīng)用程序。

教程大概分為如下9步

1.1) 第1步:安裝Laravel 5.5

1.2) 第2步:數(shù)據(jù)庫(kù)配置

1.3) 第3步:創(chuàng)建產(chǎn)品表格和模型

1.4) 第4步:創(chuàng)建Web路由和API路由

1.5) 第5步:創(chuàng)建ProductController

2.0) 第6步:安裝ReactJS的配置

3.0) 第7步:創(chuàng)建React組件文件

4.0) 第8步:創(chuàng)建視圖文件

5.0) 第9步:運(yùn)行項(xiàng)目

1. 安裝laravel5.5 1.1 創(chuàng)建項(xiàng)目
composer create-project laravel/laravel laravel-react --prefer-dist
1.2 修改數(shù)據(jù)庫(kù)配置

創(chuàng)建數(shù)據(jù)庫(kù)并修改配置文件

cd laravel-react

vim .env
1.3 創(chuàng)建文章遷移表及模型
php artisan make:model Post -m

這樣就創(chuàng)建好了Post模型以及posts

當(dāng)然你也可以分兩步執(zhí)行

// 創(chuàng)建Post 模型
php artisan make:model Post
// 創(chuàng)建posts表
php artisan make:migration create_posts_table

修改遷移文件的up方法
database/migrations/2018_01_23_021301_create_posts_table.php

    public function up()
    {
        Schema::create("posts", function (Blueprint $table) {
            $table->increments("id");
            $table->string("title");
            $table->text("content");
            $table->timestamps();
        });
    }

執(zhí)行遷移

php artisan migrate

修改app/Post.php


1.4 創(chuàng)建web路由和api路由

routes/web.php

Route::get("/", function () {
    return view("welcome");
});

routes/api.php

Route::resource("posts", "PostController");
1.5 創(chuàng)建PostController
php artisan make:controller PostController --resource
--resource 會(huì)默認(rèn)創(chuàng)建以下方法
1) index()
2) store()
3) edit()
4) update()
5) destory()
6) show() 這里暫時(shí)我們不需要這個(gè)方法

修改 app/Http/PostController.php

json($data);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return IlluminateHttpResponse
     */
    public function create(Request $request)
    {
        $data = new Post([
          "title" => $request->get("title"),
          "content" => $request->get("content")
        ]);
        $data->save();

        return response()->json("添加成功 :)");
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $request)
    {
        $data = new Post([
          "title" => $request->get("title"),
          "content" => $request->get("content")
        ]);
        $data->save();

        return response()->json("保存成功 :)");
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function edit($id)
    {
        $data = Post::find($id);
        return response()->json($data);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        $data = Post::find($id);
        $data->title = $request->get("title");
        $data->content = $request->get("content");
        $data->save();

        return response()->json("修改成功 :)");
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function destroy($id)
    {
        $data = Post::find($id);
        $data->delete();

        return response()->json("刪除成功 :)");
    }
}
2. 安裝ReactJS

修改前端預(yù)置

php artisan preset react

npm 安裝

npm install

運(yùn)行

npm run dev

安裝react router

npm install react-router@2.8.1
3. 創(chuàng)建React組件文件

我們需要?jiǎng)?chuàng)建的文件列表如下:

1)app.js

2)bootstrap.js

3)組件/ CreatePost.js

4)組件/ DisplayPost.js

5)組件/ MasterPost.js

6)組件/ MyGlobleSetting.js

7)組件/ TableRow.js

8)組件/ UpdatePost.js

resources/assets/js/app.js

require("./bootstrap");
import React from "react";
import { render } from "react-dom";
import { Router, Route, browserHistory } from "react-router";


import Master from "./components/Master";
import CreatePost from "./components/CreatePost";
import DisplayPost from "./components/DisplayPost";
import UpdatePost from "./components/UpdatePost";


render(
  
      
        
        
        
      
    ,
        document.getElementById("crud-app"));

resources/assets/js/bootstrap.js

window._ = require("lodash");


try {
    window.$ = window.jQuery = require("jquery");


    require("bootstrap-sass");
} catch (e) {}


window.axios = require("axios");


window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";

let token = document.head.querySelector("meta[name="csrf-token"]");

if (token) {
    window.axios.defaults.headers.common["X-CSRF-TOKEN"] = token.content;
} else {
    console.error("CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token");
}

resources/assets/js/components/CreatePost.js

import React, {Component} from "react";
import {browserHistory} from "react-router";
import MyGlobleSetting from "./MyGlobleSetting";


class CreatePost extends Component {
  constructor(props){
    super(props);
    this.state = {postTitle: "", postContent: ""};


    this.handleChange1 = this.handleChange1.bind(this);
    this.handleChange2 = this.handleChange2.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);


  }
  handleChange1(e){
    this.setState({
      postTitle: e.target.value
    })
  }
  handleChange2(e){
    this.setState({
      postContent: e.target.value
    })
  }
  handleSubmit(e){
    e.preventDefault();
    const posts = {
      title: this.state.postTitle,
      content: this.state.postContent
    }
    let uri = MyGlobleSetting.url + "/api/posts";
    axios.post(uri, posts).then((response) => {
      browserHistory.push("/display-item");
    });
  }


    render() {
      return (
      

Create Post


) } } export default CreatePost;

resources/assets/js/components/DisplayPost.js

import React, {Component} from "react";
import axios from "axios";
import { Link } from "react-router";
import TableRow from "./TableRow";
import MyGlobleSetting from "./MyGlobleSetting";
class DisplayPost extends Component {
  constructor(props) {
    super(props);
    this.state = {value: "", posts: ""};
  }
  componentDidMount(){
   axios.get(MyGlobleSetting.url + "/api/posts")
   .then(response => {
     this.setState({ posts: response.data });
   })
   .catch(function (error) {
     console.log(error);
   })
  }
  tabRow(){
   if(this.state.posts instanceof Array){
     return this.state.posts.map(function(object, i){
        return ;
     })
   }
  }


  render(){
    return (
      

Post

Create Post

{this.tabRow()}
ID Post Title Post Content Actions
) } } export default DisplayPost;

resources/assets/js/components/Master.js

import React, {Component} from "react";
import { Router, Route, Link } from "react-router";


class Master extends Component {
  render(){
    return (
      
{this.props.children}
) } } export default Master;

resources/assets/js/components/MyGlobleSetting.js

class MyGlobleSetting {
  constructor() {
    this.url = "http://localhost:8000";
  }
}
export default (new MyGlobleSetting);

resources/assets/js/components/TableRow.js

import React, { Component } from "react";
import { Link, browserHistory } from "react-router";
import MyGlobleSetting from "./MyGlobleSetting";


class TableRow extends Component {
  constructor(props) {
      super(props);
      this.handleSubmit = this.handleSubmit.bind(this);
  }
  handleSubmit(event) {
    event.preventDefault();
    let uri = MyGlobleSetting.url + `/api/posts/${this.props.obj.id}`;
    axios.delete(uri);
      browserHistory.push("/display-item");
  }
  render() {
    return (
        
          
            {this.props.obj.id}
          
          
            {this.props.obj.title}
          
          
            {this.props.obj.content}
          
          
          
Edit
); } } export default TableRow;

resources/assets/js/components/UpdatePost.js

import React, {Component} from "react";
import axios from "axios";
import { Link } from "react-router";
import MyGlobleSetting from "./MyGlobleSetting";


class UpdatePost extends Component {
  constructor(props) {
      super(props);
      this.state = {title: "", content: ""};
      this.handleChange1 = this.handleChange1.bind(this);
      this.handleChange2 = this.handleChange2.bind(this);
      this.handleSubmit = this.handleSubmit.bind(this);
  }


  componentDidMount(){
    axios.get(MyGlobleSetting.url + `/api/posts/${this.props.params.id}/edit`)
    .then(response => {
      this.setState({ title: response.data.title, content: response.data.content });
    })
    .catch(function (error) {
      console.log(error);
    })
  }
  handleChange1(e){
    this.setState({
      title: e.target.value
    })
  }
  handleChange2(e){
    this.setState({
      content: e.target.value
    })
  }


  handleSubmit(event) {
    event.preventDefault();
    const posts = {
      title: this.state.title,
      content: this.state.content
    }
    let uri = MyGlobleSetting.url + "/api/posts/"+this.props.params.id;
    axios.patch(uri, posts).then((response) => {
          this.props.history.push("/display-item");
    });
  }
  render(){
    return (
      

Update Post

Return to Post
) } } export default UpdatePost;
4. 創(chuàng)建主視圖文件

resources/views/welcome.blade.php



    
        
        
        
        Laravel 5.5 ReactJS CRUD Example
        
    
    
        

為了避免Laravel CSRF報(bào)錯(cuò)
我們?cè)谝晥D文件head加入



完整視圖
resources/views/welcome.blade.php



    
        
        
        
        
        Laravel 5.5 ReactJS CRUD Example
        
        
    
    
        
5. 編譯&運(yùn)行

編譯

npm run dev

artisan運(yùn)行項(xiàng)目

php artisan serve

訪問(wèn) http://localhost:8000 即可

效果圖

主要參考資料 Laravel 5.5 ReactJS Tutorial

本教程翻譯于 Laravel 5 - Simple CRUD Application Using ReactJS

github地址 https://github.com/pandoraxm/laravel-react-curd

原文鏈接 https://www.bear777.com/blog/laravel5-5-react-crud

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28147.html

相關(guān)文章

  • windows下laravel5.5手寫(xiě)教程1(適合初學(xué)者)

    摘要:打開(kāi)瀏覽器輸入,如無(wú)意外,將出現(xiàn)如下圖,表示框架安裝成功。四系統(tǒng)內(nèi)部后臺(tái)管理系統(tǒng)這個(gè)是框架自帶的后臺(tái)登錄管理系統(tǒng),只需要簡(jiǎn)單的命令即可運(yùn)行。出現(xiàn)上圖即為,創(chuàng)建模型成功。 在PHP個(gè)各種web開(kāi)發(fā)框架中,laravel算是一款簡(jiǎn)潔、優(yōu)雅的開(kāi)發(fā)框架,本人也剛剛接觸到laravel,通過(guò)學(xué)習(xí)大神們的一些文章,下面是我的一些心得體會(huì),希望可以給初學(xué)者一些幫助,大家一起進(jìn)步。言歸正傳: 本人環(huán)境...

    GeekGhc 評(píng)論0 收藏0
  • Laravel5-Markdown-Editor 在線編輯器

    摘要:是基于封裝的在線編輯器,支持項(xiàng)目。已集成本地七牛云阿里云文件存儲(chǔ)。更新記錄完成在線編輯器主程序,且集成本地七牛阿里云存儲(chǔ)。 Laravel5-Markdown-Editor Laravel5-Markdown-Editor 是基于 editor.md 封裝的 Markdown 在線編輯器,支持 Laravel5 項(xiàng)目。已集成本地、七牛云、阿里云文件存儲(chǔ)。 更新記錄 2017-11-09...

    MoAir 評(píng)論0 收藏0
  • laravel5.5和laravel-admin 安裝小坑筆記

    摘要:通過(guò)安裝器首先,通過(guò)安裝安裝器確保在系統(tǒng)路徑中中對(duì)應(yīng)路徑是,對(duì)應(yīng)路徑是,其中表示當(dāng)前用戶家目錄,否則不能在命令行任意路徑下調(diào)用命令。安裝完成后,通過(guò)簡(jiǎn)單的命令即可在當(dāng)前目錄下創(chuàng)建一個(gè)新的應(yīng)用,例如,將會(huì)創(chuàng)建一個(gè)名為的新應(yīng)用,且包含所有依賴。 配置laravel-admin 官方的教程還是沒(méi)問(wèn)題的,但也遇到了一點(diǎn)點(diǎn)小小坑,再次做個(gè)記錄吧 安裝 LaravelLaravel 使用 Comp...

    xiongzenghui 評(píng)論0 收藏0
  • Any-基于Laravel5.4新權(quán)限管理后臺(tái)骨架

    摘要:最簡(jiǎn)化權(quán)限管理系統(tǒng),基于開(kāi)發(fā)。基于開(kāi)發(fā),唯一優(yōu)化的是用權(quán)限和路由別名綁定,這樣代碼寫(xiě)好之后就可以直接使用。如果是超級(jí)管理員,即使沒(méi)有這個(gè)權(quán)限會(huì)自動(dòng)賦予權(quán)限給超級(jí)管理員角色。默認(rèn)管理員賬號(hào)密碼。然后正常執(zhí)行命令其他命令即可。 Any 最簡(jiǎn)化權(quán)限管理系統(tǒng),基于 Laravel5.4 開(kāi)發(fā)。由于 Laravel5.5 發(fā)布推遲,只好先寫(xiě)個(gè) Laravel5.4版本的,后面再升級(jí)上去。演示地址...

    Lavender 評(píng)論0 收藏0
  • laravel5.5手寫(xiě)教程3基于資源路由CURD操作(適合初學(xué)者)

    摘要:新增一篇新聞新增失敗輸入不符合要求請(qǐng)輸入標(biāo)題請(qǐng)輸入內(nèi)容新增文章上面代碼中的是為了防攻擊的,每個(gè)表單都必須存在。 本文我將結(jié)合簡(jiǎn)單例子,完成laravel框架下的增刪改查,希望會(huì)對(duì)大家有所幫助。在進(jìn)行之前,大家應(yīng)該保證自己的數(shù)據(jù)庫(kù)鏈接無(wú)誤,artisan命令能正常使用,路由鏈接無(wú)問(wèn)題。 一、創(chuàng)建控制器、路由避免影響其他路由,我們先注釋掉之前聯(lián)系時(shí)編寫(xiě)的所有路由。因?yàn)樯弦徽挛覀円呀?jīng)學(xué)會(huì)建立...

    olle 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<