关于学习Laravel5.8时的知识总结及遇到的问题(持续更新)

关于学习Laravel5.8时的知识总结及遇到的问题(持续更新)

最近发现很多公司在使用Laravel来做项目,于是决定也来研究一下。这里记录了在学习Laravel过程中遇到的所有问题以及知识总结。

错误汇总

1.0 访问报错(500)

在不使用PHP自带服务器或者laravel推荐的 Homestead Valet 作为虚拟机时,会出现一些奇怪的错误。可我们就想用自己熟悉的开发环境,不想用这几种虚拟机,就可能会出现500的情况。

这里的500错误有两种
第一种:

Parse error: syntax error, unexpected ‘?’ in D:\study\test\latest\laravel58\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php on line 500

这个问题是因为PHP版本过低,请检查项目的PHP版本,5.8要求在PHP版本在7.1.3以上

第二种:
500图片

我们可以检查log文件 。通常在我们运行过一次框架之后,在storage/log中会生成一个以时间为文件名的log文件
log文件位置
我们可以通过查看日志来判断问题的所在:

[2019-11-07 15:54:06] production.ERROR: No application encryption key has been specified. {“exception”:"[object] (RuntimeException(code: 0): No application encryption key has been specified. at D:\study\test\latest\laravel58\vendor\laravel\framework\src\Illuminate\Encryption\EncryptionServiceProvider.php:44)

"}

production.ERROR: No application encryption key has been specified. 可以看出,我们缺少了指定应用程序加密密钥,即env文件。composer安装不会出现这种问题,因为在安装过程中会自动生成,我用的是压缩包。
env图片
通常,这个字符串应该是 32 个字符长度。这个密钥将会设置在环境变量文件 .env 中。如果应用密钥还没有设置,你的用户会话和其他的加密数据将会不安全!

这个env文件可以通过命令生成,我这里的解决办法是将laravel6中的env文件复制了过来,没有报错。
如果这个方法无法解决,那可能是php扩展没有安装完整,5.8需要8个扩展(OpenSSL PDO Mbstring Tokenizer XML Ctype JSON BCMath ),但是大多数已经默认安装到了php中,ini无法找到是正常的。可以在php.exe所在目录运行php -m来查看。或者是storge和bootstrap文件没有赋予读写权限,windows环境下直接在右键属性中,安全选项卡查找用户赋予权限即可。并将文件属性取消只读。

然后,就进入index页面了
主界面

2.0 手脚架创建文件失败(500)

在win命令行使用手脚架创建文件时如果产生以下错误:

PHP Parse error: syntax error, unexpected ‘?’ in “错误位置” 500

这个错误说明当前PHP版本不支持Laravel。
请检查环境变量中系统变量和你的用户变量中的PATH是否只存在唯一一个PHP变量,如果是,再确认一下版本号是否符合Laravel标准,如果不是,则保留最新版本号在系统变量中。
重新打开命令行,输入php -v 查看当前版本。

知识点汇总

1.0 路由的基础用法

在ThinkPHP框架中,当我们在URL地址中,传递m、c、a三个参数时,系统会自动跳转到指定模型中指定控制器的指定方法,这些处理过程都是由框架自动完成的。但是,在Laravel框架中,其并没有指定固定参数,其路由必须要手工进行配置。把用户需要访问的全部路由都事先设置好,用户只能访问声明的一些路由,即没有声明的路由是不能被访问的,进而可以对网站的安全有一定的保护作用。

controller文件
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class DemoController extends Controller
{
    public function Demo (){
        echo "hello Demo";
    }
}

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

//基本写法
Route::get('admin',function () {
    return "hellow world!";
}
);
//输出:hellow world!

//基本写法,控制器 文件位置:(app\Http\Controllers)
Route::get('demo','DemoController@Demo');
//输出:hello Demo

//基本写法,控制器 关于访问文件夹内控制器写法。 文件位置:(app\Http\Controllers\Admin)
Route::get('demo','Admin\DemoController@Demo');
//输出:hello Demo

/*
*当多个路由的前缀和命名空间(位置)相同时,我们可以使用这种写法方便管理
*prefix:路由前缀
*namespace:命名空间(位置)
**/
Route::group(['prefix' => 'admin','namespace'='Admin'],function () {
	Route::get('index','DemoController@Index');
    Route::get('user','DemoController@User');
    Route::get('list','DemoController@List');
}
);
//当我们输入/admin/index就会访问app\Http\Controllers\Admin\DemoController.php中的Index方法

//传递参数
Route::get('parameter/id/{id}/name/{name}/mobile/{mobile?}',function ($id,$name,$mobile) {
    return "我的ID:".$id."。我的名字:".$name."。我的手机号:".$mobile."。";
}
);
//输出:我的ID:22。我的名字:张三。我的手机号:13645896652。

/*
 * 传递参数
 * 设置默认参数($mobile="123456")
 * 可选参数{mobile?}
 * 过滤参数类型(->where('参数','正则'))
 * ->where(['name'=>'[a-zA-Z]','id'=>'\d+']) 多个约束写法
 * */

Route::get('parameter_plus/id/{id}/name/{name}/mobile/{mobile?}',function ($id,$name,$mobile="123456") {
    return "我的ID:".$id."。我的名字:".$name."。我的手机号:".$mobile."。";
}
)->where('id','^\d+$');
//输出:我的ID:2。我的名字:李四。我的手机号:123456。

//多个前缀
Route::get('admin/index',function () {
    return "hellow index!";
}
);
Route::get('admin/list',function () {
    return "hellow list!";
}
);
Route::get('admin/login',function () {
    return "hellow login!";
}
);
//合在一起
Route::group(['prefix' => 'admin'],function () {

    Route::get('index',function () {
        return "hellow index!";
    }
    );
    Route::get('list',function () {
        return "hellow list!";
    }
    );
    Route::get('login',function () {
        return "hellow login!";
    }
    );
}
);

//多种请求方式
Route::match(['admin', 'post'], '/', function () {
    return "hellow world!";
});


//任意请求方式
Route::any('admin', function () {
    return "hellow world!";
});

//路由重定向
Route::redirect('/here', '/there');//返回值为302 (('/here', '/there', 301))可自定义返回
Route::get('/there', function () {
    return "hellow there!";
});

//页面路由
Route::view('/welcome',  'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);//可以跟一个数组,他会被传入页面中

以上就是路由的基础写法,能够满足大多数使用场景。更多路由写法与设置请参考 Laravel5.8开发文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值