Laravel-5.5快速入门

概要

通过本文, 了解Laravel的部署、配置、路由、控制器、视图、数据库操作、Artisan 命令行工具的基本操作.

环境搭建

环境: Vbox Linux docker docker-compose Laravel-5.5

git clone https://github.com/helloMJW/docker-lnmp.git
docker-compose up -d

迁移(如果在一台机器上开发了部分, 现在要更换机器开发)

git clone https://github.com/helloMJW/docker-lnmp.git
cd ./wwwroot
git clone <你已开发的代码库地址>
docker-comoposer up -d 
docker ps 
#找到php的容器ID
docker exec -it <容器ID> sh 
#进入项目中 composer install

— windows下使用vagrant搭建

1) 安装Vbox、vagrant

2) CMD: vagrant box add laravel/homestead #下载镜像文件 约30分钟 取决网络速度

3) 找一个文件夹如: cd D:/homestead git clone https://github.com/laravel/homestead.git Homestead

4) CMD: cd Homestead git checkout v6.1.0 #切换到最新移动版

5) CMD: init.bat

6) 修改 Homestead.yaml IP及项目文件夹

ip: "192.168.56.200" # vbox虚拟网卡的网段

folders:
    - map: E:\vboxFile\www\test #windows机器上的项目文件夹

sites:
    - map: homestead.app

7) 更改windows-HOST文件

192.168.10.10  homestead.app

8) 启动 vagrant up

9) 进入虚拟机安装一个新的Laravel

CMD: vagrant ssh #无需用户和密码可直接登录虚拟机中
bash: cd ~/code && laravel new #在当前目录下创建 也可 laravel new blog 但同时 Homestead.yaml 文件的域名路径也要更改

10) windows 打开浏览器: http://homestead.app # Success

但安装不一定这么顺利

Q: 可能在第8步的时候启动到 # SSH auth method: private key 就卡了或提示超时什么的?

A: 打开vbox界面找到并先关闭(homested-7)的虚拟机 然后: 点上面的设置-> 网络 -> 网卡1 -> 高级 把接入网线 打勾: 回到CMD: vagrant reload #重载 >>更多启动失败原因

_Q:在第9步可能会出现ssh无可执行文件? _

A: 找到你安装git的路径并加到系统的环境变量中. 如: D:\Git\usr\bin #点击 桌面计算机右键打开 -> 高级设置 -> 高级-> 环境变量-> 找到 APTH 双击: 把 ;D:\Git\usr\bin 加到末尾; PS: 加到环境变量后, 所有已打开的CMD界面需要重新打开. >>详细

vagrant 常用命令

  • vagrant ssh : ssh登录虚拟机
  • vagrant destroy : 移除所有虚拟机
  • vagrant halt : 关机
  • vagrant suspend : 暂停
  • vagrant box add ADDRESS : 添加虚拟机
  • vagrant box list : 列出已安装到所有虚拟机
  • vagrant box remove NAME : 删除指定虚拟机
  • vagrant provision : 运行配置的所有服务

获取文章代码

git clone https://github.com/helloMJW/laravelGs
git checkout start #切换到本文的代码

配置相关

./config/app.php

开启debug

'debug' => env('APP_DEBUG', true),

控制器

浏览器URL 访问 : http://{域名}/start/index http://{域名}/post

新建一个./app/Http/Controllers/TestControllers.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class StartController extends Controller
{
    public function index()
    {
        echo 'this is page';
    }
    /**
     * 接收一个表单数据
     * 如果是get提交侧在 /routes/web.php增加一条get路由
     * @return [type]
     */
    public function post(Request $request)
    {
        //获取所有的表单值
        $input = $request->all();
        var_dump($input);
        //获取表单提交方法
        $method = $request->method();
        var_dump($method);
        //获取表单指定值
        $value = $request->input('user');
        var_dump($value);

    }
}

修改路径文件 ./routes/web.php 末尾增加一行

Route::get('/start', 'StartController@index')->name('Start');
Route::get('/post', 'StartController@post')->name('post');

现在URL 访问 http://{域名}/Test, 侧可以输出 this is page.

ps: 那么每建一个方法都要建一条路由? >> 详见

视图

默认使用的是Blade 模板引擎, 以.blade.php为后缀.

  • 模板继承
  • 变量读取及循环
  • 表单提交及URL地址生成
<!-- 模板继承 -->
@extends('start.header')
<body>
<h1>视图操作</h1>
<!-- 单个变量 -->
<p>{{ $var }}</p>
<!-- 一维数组 -->
<p>{{ $data ['title'] }}  </p>
<!-- 多维数组 -->
<p> {{ $datas [0]['title'] }} </p>
<!-- 循环遍历 -->
@foreach ($datas as $d)
<p> title: {{ $d ['title'] }}  content: {{ $d ['content'] }} </p>
@endforeach
<!-- URL地址生成 -->
<p> 生成当前URL: {{ url()->current() }} 指定生成URL: {{ url('index/test') }}  </p>

<!-- 表单提交 -->
<div class="form">
    <form method="post" action=" {{ url('start/post') }} ">
        {{ csrf_field() }}
        <input type="hidden" name="id" value="100">
        <input type="text" name="user" value="">
        <input type="password" name="passwd">
        <input type="submit" name="提交">
    </form>
</div>

</body>
</html>

数据库

配置数据库 根目录 /.env

ps: 数据配置信息 /.env 优先级大于 ./app/config/database.php

//读取 
$users = DB::select("select * from user where User = :user", ['user' => 'root']); #[>> 原生SQL方式](https://d.laravel-china.org/docs/5.5/database)
//var_dump($users [0] -> User);

$user1 = DB::table('user')->get(); # [>> 更多构造器方法](https://d.laravel-china.org/docs/5.5/queries)
foreach ($user1 as $key => $value) {
echo '字段: user -> 值 -> ' . $value->User . '<br/>';
}
//var_dump($user1);
//增加
$id = DB::table('users')->insertGetId(
    ['email' => 'john@example.com', 'votes' => 0]
);
//修改
DB::table('users')
            ->where('id', 1)
            ->update(['votes' => 1]);

DB::table('users')
            ->where('id', 1)
            ->update(['options->enabled' => true]);
//删除
DB::table('users')->delete();
DB::table('users')->where('votes', '>', 100)->delete();

路由

路由配置文件: ./routes/web.php

Laravel使用的是显式路由. 也就是每一个需要被访问的方法都需要定义路由.

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

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::get('/test', 'TestController@index')->name('test');
//视图
Route::get('/start/view', 'StartController@display')->name('display');
Route::post('/start/post', 'StartController@post')->name('post');
Route::get('/start/post', 'StartController@post')->name('post');

// 浏览器URL访问 http://{域名}/控制器/方法
// Route::any('/{model}/{action}', function ($model, $action) {
//     $class = App::make('App\\Http\\Controllers\\' . $model . 'Controller');
//     return $class->$action();
// });

>> 关于显示路由的争论

Artisan 命令行工具

生成一个简单的认证系统

#进入到项目目录
php artisan make:auth
//url 输入 http://{域名}/login

>> 更多 artisan 命令

相关资料

文章代码-GITHUB