本文实例讲述了Laravel5.7框架安装与使用。分享给大家供大家参考,具体如下:
【安装Laravel】
Composer安装:
代码语言:javascript复制composer create-project --prefer-dist laravel/laravel
目录结构:
网站根目录指向了/public,访问报错:
原因是并没有vendor这个文件夹,看了这篇博客https://www.zalou.cn/article/158896.htm
在根目录执行 composer update,下载了一大堆东西
完事访问一片空白,错误500……然后各种百度,各种设置目录权限:
代码语言:javascript复制chmod -R 777 storage/
chmod -R 777 bootstrap/cache/
chmod -R 777 vendor/
还是不行,最后查看了/storage/logs下面的日志,有报错:
少了这么一个key,再次百度,我的做法是:把根目录.env.example这个隐藏文件重命名为.env
然后根目录执行 php artisan key:generate
(参考博客:https://blog.csdn.net/qq_39479575/article/details/78495703)
终于打开了这个页面,真不容易,明天我得吃个鸡腿庆祝一下……
使用php artisan –version 命令查看安装的Laravel版本,是最新的5.7版本:
【一些配置】
Laravel 所有的配置文件都放在根目录/config下面:
修改app.php,开启debug:
设置时区为Asia/Shanghai:
控制器目录:
视图层目录:
【初识路由】
与thinkphp相比,Laravel不能通过 /模块名/控制器名/操作名 直接访问web界面
每一个web界面都必须在 /routes/web.php中定义一条路由规则:
默认路由配置的意思是:访问根目录(网站首页),渲染视图层的”欢迎”页面:
代码语言:javascript复制Route::get('/', function () {
return view('welcome');
});
在控制器目录新建了一个IndexController.php:
代码语言:javascript复制<?php
namespace AppHttpControllers;
class IndexController extends Controller
{
public function index(){
return '这是首页';
}
}
修改首页路由:
代码语言:javascript复制Route::get('/', 'IndexController@index');
再次访问首页:
项目通常会区分前后台,在tp中可以通过划分模块来实现,Laravel中同样可以用这个原理
在控制器目录下新建了两个文件夹:Index、Admin,分别作为前、后台控制器模块:
以后台Admin为例,在下面新建两个控制器Index和User
手动创建太low了,Laravel使用命令行创建控制器、Model,命名空间都自动帮你写好……
代码语言:javascript复制php artisan make:controller Admin/IndexController
IndexController.php:
代码语言:javascript复制<?php
namespace AppHttpControllersAdmin;
use IlluminateHttpRequest;
use AppHttpControllersController;
class IndexController extends Controller
{
public function index(){
return '后台首页';
}
}
UserController.php:
代码语言:javascript复制<?php
namespace AppHttpControllersAdmin;
use IlluminateHttpRequest;
use AppHttpControllersController;
class UserController extends Controller
{
public function userlist(){
return '后台用户列表页';
}
public function useradd(){
return '后台用户添加';
}
}
在设置路由的时候,可以通过设置路由组group,共享路由属性。如:命名空间namespace、路由前缀prefix、中间件middleware等。
路由组规则设置如下:
代码语言:javascript复制//在AppHttpControllersAdmin命名空间下的控制器
Route::namespace('Admin')- group(function () {
//后台首页
Route::group(['prefix' = 'admin/index'], function () {
// 首页显示
Route::get('index', 'IndexController@index');
});
//后台用户
Route::group(['prefix' = 'admin/user'], function () {
//用户列表
Route::get('userlist', 'UserController@userlist');
//用户添加
Route::get('useradd', 'UserController@useradd');
});
});
这样就可以实现类似tp那样的 /模块名/控制器名/操作名 的访问方式:
(当然路由前缀prefix和路由名称可以随意定义,不一定要遵循tp的写法,这里只是为了清晰明了)
【中间件】
Laravel的中间件在 /app/Http/Middleware 目录下,用于过滤HTTP请求,可以做一些字段验证、身份验证、CSRF 防护等等……
Laravel自带了一些中间件:
例:设置一个CheckLog中间件,判断用户是否登录,如果登录了可以看用户列表页,否则跳转到首页
执行生成中间件命令:(这里和控制器一样采用前后台目录分开放的方式)
代码语言:javascript复制php artisan make:middleware Admin/CheckLog
CheckLog.php中间件内容:
代码语言:javascript复制<?php
namespace AppHttpMiddlewareAdmin;
use IlluminateHttpRequest;
use Closure;
class CheckLog
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$mid = $request- cookie('mid');
if(empty($mid)){
return redirect('admin/index/index');
}
//处理请求之前执行动作
return $next($request);
}
}
写好中间件之后需要注册中间件,在 /app/Http/Kernel.php 里面注册
目的是给路由分配中间件,在 routeMiddleware 属性里添加:
代码语言:javascript复制'admin.checklog' = AppHttpMiddlewareAdminCheckLog::class,
修改/routes/web.php路由配置,给后台用户路由组添加中间件属性:
代码语言:javascript复制//后台用户
Route::group(['prefix' = 'admin/user' , 'middleware' = 'admin.checklog'], function () {
//用户列表
Route::get('userlist', 'UserController@userlist');
//用户添加
Route::get('useradd', 'UserController@useradd');
});
此时访问用户列表页,会先走中间件判断登录状态,没登录跳转到首页:
(Kernel.php中其他中间件属性:全局中间件middleware、中间件组middlewareGroups、中间件执行顺序
如果不给路由设置中间件属性,也可以在控制器的构造方法里设置中间件,可以指定或排除具体某一个操作,示例如下:
代码语言:javascript复制<?php
namespace AppHttpControllersAdmin;
use IlluminateHttpRequest;
use AppHttpControllersController;
class UserController extends Controller
{
public function __construct(){
//全部操作生效
$this- middleware('admin.checklog');
//仅xxx操作生效
// $this- middleware('admin.checklog')- only('userlist');
//除xxx操作生效
// $this- middleware('admin.checklog')- except('useradd');
}
public function userlist(){
return '后台用户列表页';
}
public function useradd(){
return '后台用户添加';
}
}
【请求 request】
获得请求,首先需要引入IlluminateHttpRequest类
基本使用:
代码语言:javascript复制<?php
namespace AppHttpControllersAdmin;
use IlluminateHttpRequest;
use AppHttpControllersController;
class IndexController extends Controller
{
public function index(Request $request){
$uri = '请求路径:'.$request- path();
$url = '请求URL:'.$request- url();
$method = '请求方法:'.$request- method();
$name = '获取请求参数:'.$request- input('name');
$mid = '获取cookie:'.$request- cookie('mid');
$key = '获取session:'.$request- session()- get('key');
$file = '获取上传文件:'.$request- file('photo');
dump($uri);
dump($url);
dump($method);
dump($name);
dump($mid);
dump($file);
//验证请求路径
//if ($request- is('admin/*')) {
//}
//验证请求方法
//if ($request- isMethod('post')) {
//}
}
}
【分配数据 渲染视图】
以后台首页视图 /admin/index/index为例:
控制器使用view()
函数渲染视图,同时分配数据:
<?php
namespace AppHttpControllersAdmin;
use AppHttpControllersController;
class IndexController extends Controller
{
public function index(){
//分配一个字段
// $name = 'lws';
// return view('admin.index.index')- with('name',$name);
//分配数组
$data = ['name' = 'lws','sex' = 'nan'];
return view('admin.index.index', $data);
//也可以使用php的compact函数传值
//$name = 'lws';
//$sex = 'nan';
//return view('admin.index.index',compact('name','sex'));
}
}
视图层使用双大括号{{ }}获得数据:
代码语言:javascript复制姓名:{{$name}}<br/
性别:{{$sex}}
{{ test }}会自动调用 PHP 的 htmlspecialchars()函数防止 XSS 攻击,如果不需要转义可使用{!! test!!},例如富文本格式。
更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。