概要
通过本文, 了解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