如果希望快速节制区块链运用的开拓,推举汇智网的区块链运用开拓系列教程, 内容涵盖比特币、以太坊、eos、超级账本fabric和tendermint等多种区块链,以及 java、go、nodejs、python、php、dart等多种开拓措辞。
1、安装PHP环境Laravel 5.8 哀求PHP 7.1+,因此我们须要先安装最新版的PHP。在大多数系统上这个过程都很大略。
1.1 安装PHP7.1
在ubuntu上实行以下命令:
~$ sudo add-apt-repository ppa:ondrej/php~$ sudo apt-get update~$ sudo apt-get install php7.1
如果你的ubuntu版本是18.04,那么默认的软件仓里就包含了PHP7.2,因此可以直接安装:
~$ sudo apt-get install php
1.2 安装必要的PHP模块
Laravel 5.8须要一些扩展模块,可以利用下面的命令安装:
~ $ sudo apt-get install php7.1 php7.1-cli php7.1-common php7.1-json php7.1-opcache php7.1-mysql php7.1-mbstring php7.1-mcrypt php7.1-zip php7.1-fpm php7.1-xml
1.3 安装PHP Composer
现在让我们开始安装Composer,PHP的包管理器。
从官网下载安装程序然后进行安装:
~$ curl -sS https://getcomposer.org/installer -o composer-setup.php~$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
利用下面的命令验证composer的安装:
~$ composer
该当可以看到如下输出:
/ ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___// /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/Composer version 1.8.0 2018-12-03 10:31:16Usage: command [options] [arguments]Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information --no-plugins Whether to disable plugins. -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory. -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug2、初始化Laravel 5.8项目
天生一个Laravel 5.8项目非常大略,在终端输入如下命令:
~$ composer create-project --prefer-dist laravel/laravel crud-app
上述命令将安装laravel 5.8.3。可以利用下面的命令来验证安装的版本:
~$ cd crud-app~/crud-app$ php artisan -VLaravel Framework 5.8.193、安装Laravel项目的前端依赖库
在天生的Laravel项目中,package.json文件包含了前端依赖库的描述信息,例如:
axiosbootstrapcross-envjquerylaravel-mixlodashpopper.jsresolve-url-loadersasssass-loadervue利用npm命令安装这些前端依赖库:
~/crud-app$ npm install
npm命令实行完之后,在目录中将会涌现node_modules目录。
4、创建MySQL数据库现在我们来创建一个MySQL数据库来保存数据。在终端启动mysql客户端并在提示时输入密码,然后进入mysql掌握台:
~$ mysql -u root -p
在mysql掌握台输入下面的SQL语句创建db数据库:
mysql> create database db;
打开.env文件来更新访问MySQL数据库的账号信息:
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=dbDB_USERNAME=rootDB_PASSWORD=
现在,可以运行migrate命令来创建Laravel须要的SQL数据表了:
~/crud-app$ php artisan migrate5、创建第一个Laravel模型
Laravel利用MVC架构模式来将运用解耦为三个部分:
模型Model用来封装数据访问层视图View用来封装表示层掌握器Controller用来封装运用掌握代码并卖力模型和视图的通信现在让我们来创建第一个Laravel模型,在终端输入如下命令:
~/crud-app$ php artisan make:model Contact --migration
上面的命令将创建一个Contact模型以及一个迁移文件,在终端中我们得到类似下面这样的输出:
Model created successfully.Created Migration: 2019_01_27_193840_create_contacts_table
打开迁移文件database/migrations/xxxxxx_create_contacts_table进行相应的更新:
<?phpuse Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateContactsTable extends Migration{ / Run the migrations. @return void / public function up() { Schema::create('contacts', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->string('first_name'); $table->string('last_name'); $table->string('email'); $table->string('job_title'); $table->string('city'); $table->string('country'); }); } / Reverse the migrations. @return void / public function down() { Schema::dropIfExists('contacts'); }}
我们再contracts表中添加这些字段:first_name、last_name、email、job_title、city 和 country 。
现在可以利用下面的命令在数据库中创建contracts表:
~/crud-app$ php artisan migrate
现在让我们看一下Contract模型,我们将利用它来和contracts数据表交互。打开app/Contact.php 并参考以下内容进行更新:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Contact extends Model{ protected $fillable = [ 'first_name', 'last_name', 'email', 'city', 'country', 'job_title' ];}6、创建Laravel掌握器和路由
在创建模型并实行数据迁移后,现在我们创建与Contract模型协同事情的掌握器和路由。在终端运行下面的命令:
~/crud-app$ php artisan make:controller ContactController --resource
打开app/Http/Controllers/ContactController.php,初始内容如下:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class ContactController extends Controller{ / Display a listing of the resource. @return \Illuminate\Http\Response / public function index() { // } / Show the form for creating a new resource. @return \Illuminate\Http\Response / public function create() { // } / Store a newly created resource in storage. @param \Illuminate\Http\Request $request @return \Illuminate\Http\Response / public function store(Request $request) { // } / Display the specified resource. @param int $id @return \Illuminate\Http\Response / public function show($id) { // } / Show the form for editing the specified resource. @param int $id @return \Illuminate\Http\Response / public function edit($id) { // } / Update the specified resource in storage. @param \Illuminate\Http\Request $request @param int $id @return \Illuminate\Http\Response / public function update(Request $request, $id) { // } / Remove the specified resource from storage. @param int $id @return \Illuminate\Http\Response / public function destroy($id) { // }}
ContractController类继续自Laravel的Controller类,并且定义了一组方法用于对Contact模型的CRUD操作。现在我们须要实现这些方法。不过在实现这些方法之前,让我们先添加路由。
打开routes/web.php,参考如下内容进行修正:
<?phpRoute::get('/', function () { return view('welcome');});Route::resource('contacts', 'ContactController');
利用Route的resource()静态方法,你可以创建多个路由来暴露资源的多种访问操作。这些路由都映射到ContactController的不同方法上(我们随后将实现这些方法):
GET/contacts:映射到index()方法GET /contacts/create:映射到create()方法POST /contacts:映射到store() 方法GET /contacts/{contact}:映射到show()方法GET /contacts/{contact}/edit: 映射到edit()方法PUT/PATCH /contacts/{contact}:映射到update()方法DELETE /contacts/{contact}:映射到destroy()方法这些路由用于供应HTML模板,同时也用作Contract模型的API端结点。
7、实现CRUD操作现在让我们实现掌握器的方法。
7.1 C - Create/创建操作
ContactController包含了映射到POST /contracts端结点的store()方法,该方法将用来在数据库中创建一个联系人/contact,映射到GET / contracts/create的create()方法将用来供应HTML表单。仙子我们来实现这两个方法。
首先重新打开app/Http/Controllers/ContactController.php ,导入Contact模型:
use App\Contact;
接下来,找到store()方法进行如下修正:
public function store(Request $request){ $request->validate([ 'first_name'=>'required', 'last_name'=>'required', 'email'=>'required' ]); $contact = new Contact([ 'first_name' => $request->get('first_name'), 'last_name' => $request->get('last_name'), 'email' => $request->get('email'), 'job_title' => $request->get('job_title'), 'city' => $request->get('city'), 'country' => $request->get('country') ]); $contact->save(); return redirect('/contacts')->with('success', 'Contact saved!');}
然后,找到create()方法进行如下修正:
public function create(){ return view('contacts.create');}
create()函数利用view()方法来返回reousrces/view目录中的create.blade.php模板。
在创建create.blade.php模板之前,我们须要创建一个根本模板,create以及本教程中的其他模板都将继续这个根本模板。
在resources/views目录中,创建base.blade.php文件:
~/crud-app$ cd resources/views~/crud-app$ touch base.blade.php
打开resources/views/base.blade.php,添加如下模板:
<!DOCTYPE html><html lang=\"大众en\"大众><head> <meta name=\"大众viewport\"大众 content=\公众width=device-width, initial-scale=1.0\"大众> <title>Laravel 5.8 & MySQL CRUD Tutorial</title> <link href=\"大众{{ asset('css/app.css') }}\"大众 rel=\"大众stylesheet\"大众 type=\公众text/css\"大众 /></head><body> <div class=\公众container\"大众> @yield('main') </div> <script src=\"大众{{ asset('js/app.js') }}\公众 type=\公众text/js\公众></script></body></html>
现在我们创建create.blade.php模板。首先在views目录创建一个contracts文件夹:
~/crud-app/views$ mkdir contacts
然后创建模板:
~/crud-app/views$ cd contacts~/crud-app/views/contacts$ touch create.blade.php
打开resources/views/contacts/create.blade.php,添加如下代码:
@extends('base')@section('main')<div class=\"大众row\"大众> <div class=\"大众col-sm-8 offset-sm-2\"大众> <h1 class=\公众display-3\"大众>Add a contact</h1> <div> @if ($errors->any()) <div class=\"大众alert alert-danger\公众> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div><br /> @endif <form method=\"大众post\"大众 action=\"大众{{ route('contacts.store') }}\"大众> @csrf <div class=\"大众form-group\"大众> <label for=\公众first_name\"大众>First Name:</label> <input type=\"大众text\公众 class=\"大众form-control\"大众 name=\"大众first_name\"大众/> </div> <div class=\公众form-group\"大众> <label for=\"大众last_name\"大众>Last Name:</label> <input type=\公众text\公众 class=\公众form-control\"大众 name=\"大众last_name\"大众/> </div> <div class=\公众form-group\"大众> <label for=\"大众email\"大众>Email:</label> <input type=\"大众text\"大众 class=\"大众form-control\"大众 name=\公众email\"大众/> </div> <div class=\公众form-group\公众> <label for=\"大众city\"大众>City:</label> <input type=\公众text\公众 class=\"大众form-control\"大众 name=\"大众city\公众/> </div> <div class=\"大众form-group\"大众> <label for=\"大众country\"大众>Country:</label> <input type=\公众text\"大众 class=\公众form-control\公众 name=\"大众country\"大众/> </div> <div class=\公众form-group\"大众> <label for=\"大众job_title\"大众>Job Title:</label> <input type=\公众text\"大众 class=\"大众form-control\"大众 name=\公众job_title\"大众/> </div> <button type=\"大众submit\"大众 class=\"大众btn btn-primary-outline\"大众>Add contact</button> </form> </div></div></div>@endsection
表单效果如下:
7.2R - Read/读取操作
现在让我们读取并显示MySQL数据库中的联系人信息。
打开app/Http/Controllers/ContactController.php文件,找到index()方法并进行如下修正:
public function index(){ $contacts = Contact::all(); return view('contacts.index', compact('contacts'));}
接下来创建index模板resources/views/contacts.index.blade.php:
~/crud-app/views/contacts$ touch index.blade.php
打开resources/views/contacts/index.blade.php 添加如下代码:
@extends('base')@section('main')<div class=\"大众row\公众><div class=\"大众col-sm-12\公众> <h1 class=\"大众display-3\"大众>Contacts</h1> <table class=\"大众table table-striped\"大众> <thead> <tr> <td>ID</td> <td>Name</td> <td>Email</td> <td>Job Title</td> <td>City</td> <td>Country</td> <td colspan = 2>Actions</td> </tr> </thead> <tbody> @foreach($contacts as $contact) <tr> <td>{{$contact->id}}</td> <td>{{$contact->first_name}} {{$contact->last_name}}</td> <td>{{$contact->email}}</td> <td>{{$contact->job_title}}</td> <td>{{$contact->city}}</td> <td>{{$contact->country}}</td> <td> <a href=\公众{{ route('contacts.edit',$contact->id)}}\"大众 class=\公众btn btn-primary\"大众>Edit</a> </td> <td> <form action=\"大众{{ route('contacts.destroy', $contact->id)}}\"大众 method=\"大众post\"大众> @csrf @method('DELETE') <button class=\"大众btn btn-danger\"大众 type=\"大众submit\公众>Delete</button> </form> </td> </tr> @endforeach </tbody> </table><div></div>@endsection
7.3 U - Update/更新操作
现在我们实现数据更新操作。打开app/Http/Controllers/ContactController.php文件,找到edit($id)方法进行如下更新:
public function edit($id){ $contact = Contact::find($id); return view('contacts.edit', compact('contact')); }
接下来我们实现update()方法:
public function update(Request $request, $id){ $request->validate([ 'first_name'=>'required', 'last_name'=>'required', 'email'=>'required' ]); $contact = Contact::find($id); $contact->first_name = $request->get('first_name'); $contact->last_name = $request->get('last_name'); $contact->email = $request->get('email'); $contact->job_title = $request->get('job_title'); $contact->city = $request->get('city'); $contact->country = $request->get('country'); $contact->save(); return redirect('/contacts')->with('success', 'Contact updated!');}
现在须要添加edit模板,在resources/views/contacts/目录中创建edit.blade.php文件:
~/crud-app/views/contacts$ touch edit.blade.php
打开文件resources/views/contacts/edit.blade.php,添加如下代码:
@extends('base') @section('main')<div class=\公众row\"大众> <div class=\"大众col-sm-8 offset-sm-2\"大众> <h1 class=\公众display-3\"大众>Update a contact</h1> @if ($errors->any()) <div class=\"大众alert alert-danger\"大众> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> <br /> @endif <form method=\公众post\"大众 action=\"大众{{ route('contacts.update', $contact->id) }}\"大众> @method('PATCH') @csrf <div class=\公众form-group\"大众> <label for=\"大众first_name\"大众>First Name:</label> <input type=\"大众text\"大众 class=\"大众form-control\"大众 name=\"大众first_name\"大众 value={{ $contact->first_name }} /> </div> <div class=\"大众form-group\"大众> <label for=\"大众last_name\公众>Last Name:</label> <input type=\"大众text\公众 class=\"大众form-control\公众 name=\公众last_name\"大众 value={{ $contact->last_name }} /> </div> <div class=\"大众form-group\"大众> <label for=\"大众email\公众>Email:</label> <input type=\公众text\"大众 class=\公众form-control\公众 name=\"大众email\公众 value={{ $contact->email }} /> </div> <div class=\"大众form-group\"大众> <label for=\"大众city\公众>City:</label> <input type=\公众text\"大众 class=\公众form-control\"大众 name=\"大众city\"大众 value={{ $contact->city }} /> </div> <div class=\"大众form-group\公众> <label for=\"大众country\"大众>Country:</label> <input type=\"大众text\公众 class=\"大众form-control\公众 name=\"大众country\"大众 value={{ $contact->country }} /> </div> <div class=\公众form-group\"大众> <label for=\公众job_title\公众>Job Title:</label> <input type=\"大众text\公众 class=\"大众form-control\"大众 name=\"大众job_title\"大众 value={{ $contact->job_title }} /> </div> <button type=\公众submit\"大众 class=\"大众btn btn-primary\"大众>Update</button> </form> </div></div>@endsection
7.4 D - Delete/删除操作
末了我们要实现删除操作。打开app/Http/Controllers/ContactController.php文件,找到destroy() 方法,然后进行如下的更新:
public function destroy($id){ $contact = Contact::find($id); $contact->delete(); return redirect('/contacts')->with('success', 'Contact deleted!');}
随意马虎把稳到CRUD API方法中重定向到/contacts路由时,传入了一个index模板中没有的,现在让我们来修正。
打开resources/views/contacts/index.blade.php文件,找到如下代码:
<div class=\公众col-sm-12\"大众> @if(session()->get('success')) <div class=\"大众alert alert-success\"大众> {{ session()->get('success') }} </div> @endif</div>
我们还须要添加一个按钮:
<div> <a style=\"大众margin: 19px;\"大众 href=\公众{{ route('contacts.create')}}\"大众 class=\"大众btn btn-primary\"大众>New contact</a></div>
页面效果如下:
原文链接:Laravel 5.8简明教程 — 汇智网