整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「软件」使用Laravel快速构建RESTful风格

「软件」使用Laravel快速构建RESTful风格的API!

aravel是一款设计简洁、优雅的Web开发框架,受益于PHP的众多新特性, Laravel可以帮助开发者快速构建RESTful风格的API,因此在国外开发者中非常流行。

笔者之前一直用C++做底层开发,在开始Web开发旅途的时候接触到了Laravel,使用之后感觉就像发现了新大陆,对其中的快速构建能力惊奇不已。尽管Laravel的文档非常详细,但源码才是最好的文档,Laravel的框架中运用了诸多设计模式,这也是Laravel能够写出如此优雅的代码的原因。

Laravel拥有非常活跃的社区,同时提供了非常丰富的开源组件,让开发者在实际开发中如虎添翼。

原创微信公众号:卧龙会IT技术。闲言碎语不用讲,说一说好汉Laravel,今天为大家演示如何用Laravel快速部署一个简单的后台程序。

一、创建工程

环境搭建可以参照文末的相关章节,这里不详细阐述。首先开始创建我们的Laravel空白项目。

  1. 新建工作目录,选在D盘的work目录:

切换到work目录下,执行composer命令:

composer create-project laravel/laravel yourProjectName

如果一切正常,work目录下就会生成一个空的Laravel项目。目录结构如下:

稍作解释:

  • app是我们写自己代码的地方,包含了应用的核心代码;

  • bootstrap目录包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能;

  • config目录包含了应用所有的配置文件;

  • database目录包含了数据迁移及填充文件,如果你喜欢的话还可以将其作为SQLite数据库存放目录;

  • public目录包含了前端控制器和资源文件(图片、js、css等);

  • resources目录包含了视图文件及原生资源文件(LESS、SASS、CoffeeScript),以及本地化文件;

  • storage目录包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件,该文件夹被隔离成app、framework和logs目录,app目录用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,最后,logs目录包含应用的日志文件;

  • tests目录包含自动化测试,其中已经提供了一个开箱即用的PHPUnit示例;

  • vendor目录包含Composer依赖;

其实这时候就可以分析Laravel源码了,我分析源码的习惯是先分析软件的生命周期,有个全局的概念,然后再一个模块一个模块的去分析。本文的重点不在这里,我们这里不过多介绍。

二、数据库配置:

在L.env中修改数据库相关链接信息,否则有些组件包会安装失败.

三、组件安装

从码云下载开发api后台常用的函数组件包,我自己写的,用起来方便不少,一些常用的操作不需要重复开发:

进入 我们的工程目录 并clone下来我的库https://git.oschina.net/duyisu/tiger.git,

然后安装后台开发必要的组件,包括(在根目录(laraveltest)底下直接执行下列命令)

composer require dingo/api 1.0.x@devcomposer require damian-nz/l5-swagger dev-mastercomposer require encore/laravel-admin "1.4.*"composer require tymon/jwt-auth "^0.5.11"composer require toplan/laravel-sms ~2.5composer require endroid/qrcode ^1.9

composer require zizaco/entrust 5.2.x-dev

稍作解释

  • Dingo/api是用来开发api的组件包

  • Damian-nz/l5-swagger是用来自动生成api在线文档的组件包

  • Encore/aravel-admin用来快速开发管理后台

  • Tymon/jwt-auth 用户授权验证组件包

  • Toplan/laravel-sms短信验证

  • Endroid/qrcode 二维码生成

Tiger组件包需要手动修改依赖文件

在根目录下修改composer.json,将"Tiger\Api\": "app/tiger/api/src/"添加到psr-4:还用到一个帮助文件, "psr-4": { "App\": "app/", "Tiger\Api\": "app/tiger/api/src/" }

原创微信公众号:卧龙会IT技术

接下来把provider添加到config目录下的app.php内的的provider数组

Dingo\Api\Provider\LaravelServiceProvider::class,Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,Tiger\Api\Providers\TigerApiServerProvider::class,L5Swagger\L5SwaggerServiceProvider::class,Encore\Admin\Providers\AdminServiceProvider::class,Zizaco\Entrust\EntrustServiceProvider::class,Toplan\PhpSms\PhpSmsServiceProvider::class,Toplan\Sms\SmsManagerServiceProvider::class,

'PhpSms'=> Toplan\PhpSms\Facades\Sms::class,'SmsManager'=> Toplan\Sms\Facades\SmsManager::class,

资源文件发布

php artisan vendor:publish --provider="Toplan\PhpSms\PhpSmsServiceProvider"php artisan vendor:publish --provider="Toplan\Sms\SmsManagerServiceProvider"

php artisan l5-swagger:publish

composer dump-autoload

php artisan vendor:publish

其他必要的操作

.env增加API_STANDARDS_TREE=vndAPI_PREFIX=apiAPI_VERSION=v1API_DEBUG=true

修改api在线文档路由

修改config目录下l5-swagger.php 'routes'=> [ 'docs'=> 'docs', ],

'paths'=> [

'excludes'=> [base_path('app/tiger/api')],

], 'generate_always'=> env('L5_SWAGGER_GENERATE_ALWAYS', true), '

添加中间件

'jwt.auth'=> \Tymon\JWTAuth\Middleware\GetUserFromToken::class,增加到kenel.php中的 $routeMiddleware数据中

修改默认的用户认证model为Profile

修改config/auth.php 'providers'=> [ 'users'=> [ 'driver'=> 'eloquent', 'model'=> App\Models\Profile::class, 'table'=> 'profile', ],

修改jwt.php 'user'=> 'App\Models\Profile',

下面一步是设置时区,到config/app.php文件下修改时区。

'timezone'=> 'Asia/Shanghai',

四、代码自动生成

接下来后台代码可以自动生成了:

  1. 创建用户认证相关控制器,路由 这个功能依赖于我自己写的tiger组件包 php artisan api:make-auth-controller UserController

  1. Api接口相关的模型控制器 这个功能依赖于我自己写的tiger组件包 php artisan api:make-controller User

  1. 安装后台管理相关的路由

后台管理 laravel-admin包的命令行功能,可以快速生成后台php artisan admin:make UserController --model=App\Models\User

  1. 上面的命令执行完成后,

然后修改对用的controller的代码,完成软件逻辑的部分。

必须要在app\Admin\routes.php里面添加路由.

至此,app后台基本框架已经完成。

在线api文档生成的路径是yourdomain/api-docs

后台api访问路径yourdomain/api/xxx

后台管理访问路径yourdomain/admin 用户名:admin 密码:admin

五、环境搭建

开发环境在windows下开发,安装wamp一键安装包即可,自己百度。

生产环境是unbunbo,环境的搭建参考这篇博文

http://www.blog8090.com/ubuntu-xia-php7-mysql5-7-lnmp-huan-jing-da-jian/

可能会踩坑的地方是:

1.mysql安装0.5.3的源会失败,换成0.8.1的就没有问题

2.配置nginx老是不成功,原来是和自带的apache冲突,卸载掉apache在装nginx

sudo apt-get remove apache*

安装composer依赖管理工具,官网下载即可,支持windows一键安装。

有时候安装了composer不能正常使用,有可能是环境变量问题,解决方案:composer环境变量问题:在命令行里执行

composer config -l -g

在输出的结果中,其中的 【home】 配置项内容就是了composer的主目录,然后进入vendor\bin,将这个路径加入环境变量。从上面的报错信息里可以看出,你用来初始化项目的vendor\bin是C:\Users\yanwushu\vendor\bin,你需要确定这个路径是composer的主目录,且下面的vendor\bin存在。建议执行一下我上面说的方法,查看一下路径,然后添加正确路径到环境变量。

虽然packagist会有点卡,但是也不推荐使用composer中文镜像,否则下载的包有可能不是最新的,各种问题会出现。

文|原创:阡陌网络

更多精彩,专注IT技术,请关注

微信公众号:卧龙会IT技术

有大神直播免费公益课!赶快来与卧龙会大神互动

------欢迎大家分享原文到朋友圈,微信群,QQ群等!本文由卧龙会团队成员阡陌网络原创,请勿抄袭,转载,转载联系卧龙会进行授权,否则追究法律责任。

个服务器不能配置多个子域名的时候很是尴尬,无法使用虚拟目录,只能通过二级目录访问。在根目录/data/wwwroot/default部署了多个laravel应用,laravel1,-laravel2...,然后按文档配置所谓的优雅链接,遇到了诸多问题:

  • apache服务器:XAMPP的lamp环境
  • nginx服务器:OneinStack自动部署lnmp环境

Apache服务器

在lamp环境下使用还是蛮简单,配置Laravel/public/.htaccess:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

即可,访问的地址:

http://test.comlaravel1/public/admin/index

http://test.com/laravel2/public/admin/index

nginx服务器

文档中说,只要在nginx.conf下配置:

location / {
 try_files $uri $uri/ /index.php?$query_string;
}

即可,访问优雅链接,但结果有点失望,你会遇到问题:

  1. Access denied.
  2. No input file specified.
  3. 504
  4. ...

归根结底是nginx.conf配置问题,本人遇到最多就是Access denied,因为使用OneinStack自动部署lnmp环境,nginx.conf已经默认配置了,结果仔细对比,少了下面配置

fastcgi_split_path_info ^(.+\.php)(.*)$;

参考:https://segmentfault.com/a/1190000002667095

难怪laravel优雅链接index.php后面一直无法访问,目前为题已解决,附上一段网上的配置:

server {
 listen 80; 
	server_name _; 
	set $root_path '/data/www/default'; 
	root $root_path; 
 
	index index.php index.html index.htm; 
 
	try_files $uri $uri/ @rewrite; 
 
	location @rewrite { 
		rewrite ^/(.*)$ /index.php?_url=/$1; 
	} 
 
	location ~ \.php { 
 
		fastcgi_pass 127.0.0.1:9000; 
		fastcgi_index /index.php; 
 
		fastcgi_split_path_info ^(.+\.php)(/.+)$; 
		fastcgi_param PATH_INFO $fastcgi_path_info; 
		fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
		include fastcgi_params;
	} 
 
	location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { 
		root $root_path; 
	} 
 
	location ~ /\.ht { 
		deny all; 
	} 
}

http://test.com/laravel1/public/index.php/admin/index

http://test.com/laravel2/public/index.php/admin/index

都可以正常访问了,OK!

最后隐藏index.php

虽然上述配置在laravel中可以正常访问,但是一些放在public里面的静态资源可能无法访问,比如无法使用asset()函数时,路径中就包含index.php导致资源无法加载,所以建议隐藏index.php

if (!-e $request_filename) {
 rewrite ^/(.*)/public/(.*)$ /$1/public/index.php/$2 last;
 break;
}

http://test.com/laravel1/public/admin/index

http://test.com/laravel2/public/admin/index

以上就无需加index.php,即可正常访问

omposer安装

https://www.phpcomposer.com/

https://docs.phpcomposer.com/00-intro.html

laravel安装

composer create-project laravel/laravel 安装目录

cd 安装目录

php artisan serve

就会显示出一个地址,你在浏览器中输入这个地址和端口能看到laravel输出内容

这里还需要配置前端的知识,这里有一个webpack.mix.js,这个是一个简单的webpack配置,webpack简单点说就是一个前端的打包工具,可以把js和css进行代码压缩,我们在这里只要在新的dos窗口中运行npm install进行安装

安装完后运行npm run watch就可以看到系统会自动把js进行打包了,此时,如果js或者css有修改,则会自动打包到public相应的目录下。这里的话,还是希望大家可以去看一下webpack的入门,了解下就行了,如果你不想学,也可以不用这个,去手动写js和css文件。

bootstrap安装

https://www.bootcss.com/

在这里下载你想使用的bootstrap版本,并放入到laravel的public目录里就可以在模板中进行使用了,public相当于公共目录,所有的网页都能进行引入,还有一个storage目录,我们可以使用php artisan storage:link进行关联,我们后面慢慢讲解具体的内容!