在Laravel框架中内置了”哈希”Hash加密单向加密方法,且同样的参数加密出的字符串是绝对不会出现相同的情况 这就提高了安全性;
在实际开发中我们常常遇到这样的问题,就是开发地点不固定,这就造成了我们需要频繁的更改数据库配置,给开发工作造成了麻烦,TP依然没有避免这个”灾难”;在laravel框架中,.env环境文件的出现解决了这个麻烦,我们只需要在不同的工作地点配置好.env文件就不必再进行配置,因为无论是git还是svn ” .env是不会随着文件一起提交到服务器的”;
app/Http/Kernel.php 中的 $middleware 属性中列出中间件
/**
* 应用程序的路由中间件组
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'auth:api',
],
];
中间件参数
中间件还可以接收其他参数。例如,如果你的应用程序需要在执行给定操作之前验证用户是否为给定的「角色」 ,你可以创建一个 CheckRole 中间件,由它来接收「角色」名称作为附加参数。
附加的中间参数应该在 $next 参数之后传递给中间件:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* 处理传入的参数
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
}
定义路由时通过一个 : 来隔开中间件名称和参数来指定中间件参数。多个参数就使用逗号分隔:
Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');
到此我们已经注册了视图合成器,每次渲染 profile 视图时都会执行 ProfileComposer@compose 方法
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('count', $this->users->count());
}
视图合成器的 compose 方法会在视图渲染之前被调用,并传入一个 Illuminate\View\View 实例。你可以使用 with 方法将数据绑定到视图。
将视图合成器添加到多个视图
通过将一组视图作为第一个参数传入 composer 方法,将一个视图合成器添加到多个视图:
View::composer(
['profile', 'dashboard'],
'App\Http\View\Composers\MyViewComposer'
);
composer 方法同时也接受通配符 * ,表示将一个视图合成器添加到所有视图:
View::composer('*', function ($view) {
//
});
如果在你部署过程中执行
config:cache
命令,你应当确保你仅从你的配置文件中调用 env 函数
。一旦配置被缓存,.env 文件将不被加载
并且对 env 函数的所有调用将返回 null。
确定当前环境
应用程序当前所处环境是通过 .env
文件中的 APP_ENV
变量确定的。你可以通过 App
facade 中的 environment
方法来访问此值:
$environment = App::environment();
你还可以传递参数给 environment
方法,以检查当前的环境配置是否与给定值匹配。 如果与给定值匹配,该方法将返回 true
:
if (App::environment('local')) {
// 当前环境是 local
}
if (App::environment(['local', 'staging'])) {
// 当前的环境是 local 或 staging...
}
{tip} 应用程序当前所处环境检测可以被服务器级的
APP_ENV
环境变量覆盖。这在为相同的应用程序配置不同的环境时是非常有用的,这样你可以在你的服务器配置中为给定的主机设置与其匹配的给定的环境。
Laravel框架的运行对环境是有严格要求的。
php.ini配置文件需要开启的扩展:
extension=php_openssl.dll
extension=php_pdo_mysql.dll
extension=php_mbstring.dll
extension=php_fileinfo.dll(验证码代码依赖需要该扩展)
extension=php_curl.dll(主要用于请求的发送)
httpd.conf配置文件需要开启的模块:
LoadModule deflate_module modules/mod_deflate.so
LoadModule rewrite_module modules/mod_rewrite.so
1. php加环境变量
2.将composer.phar移动到php.exe所在的目录
3.在php.exe所在的目录新建composer.bat文件
输入:@php "%~dp0composer.phar" %*
(使用php.exe执行composer.phar)
$validator = Validator::make(需要验证的数据,验证规则)
$validator->passes() :返回true, 表示通过验证, 返回false,表示没有通过验证
$validator->failes(): 返回false, 表示通过验证, 返回true,表示没有通过验证
$errors = $validator->errors(): 返回出错信息(返回的是对象)
$errors->get('uesrname')获取指定字段的出错信息
$errors->all() 获取所有字段的出错信息(数组)
$errors->has('username') 判断指定字段是否出错 true: 指定字段出错, false:指定字段没有出错
在laravel中设置时区为中国 Aisa/Shanghai,修改config/app.php
路由中间件
注册中间件,在app/Http/Kernel.php
使用block.ip的中间件
场景:在/test25路由上应用block.ip这个中间件
给中间件传递参数
接收传给中间件的参数
Input::hasFile('file') 返回false表示用户没有提交文件,true表示用户提交了文件
自定义验证规则
在注册服务的文件中定义
app/Providers/AppServiceProvider.php文件中定义
场景:比如中文验证规则,验证给定的字符串必须是中文
核心代码: preg_match(/^[\x{2E80}-\x{9FFF}]+str)
执行任意的SQL语句
1. 执行任意的insert, update, delete语句
DB::statment("INSERT INTO admin VALUES (null, '小赵', '111111')")
2. 执行任意的select语句
DB::select("SELECT permission.display_name FROM permission
LEFT JOIN role_permission_rel ON permission.id=role_permission_rel.permission_id
WHERE admin.username='小明'")
数据库种子
给表添加测试数据
场景:添加1000个管理员的测试数据,一千个管理员的名字要不同,要真实。
->php artisan make:seeder AdminTableSeeder
->php artisan db:seed --class=AdminTableSeeder
$errors->count(): 错误的数量
$errors->has('username'): 检查给定的字段是否出错, false: 没有出错, true:出错
$errors->first('username'): 取出给定的字段的第一个错误
$errors->get('username'): 取出给定的字段的所有错误(重点)
$errors->all(): 取出所有字段的错误信息
$errors->toJson(): 把所有字段的错误信息转成json格式
$errors->isEmpty(): 检查是否有错误, true: 没有错误, false:有错误
$errors->any(): 检查是否有错误, false: 没有错误, true:有错误
视图中输出特殊字符不要给我转义
应用场景:
1. 原样输出html代码
Redis
常用的redis的操作
增删改查
队列
订阅/发布
增
redis指令: set 参数名 参数值 过期时间
场景,把所有的角色进行json编码后保存到redis中
查
redis命令:get roles
encrypt()/decrypt()
:加密和解密
使用Session门面
Session::put('key', 'value'); Session中存储一个变量
$value = Session::get('key'); Session中获取一个变量
$value = Session::get('key', 'default'); Session中获取一个变量或返回一个默认值(如果变量不存在)
$value = Session::get('key', function() { return 'default'; });
Session::all(); Session中获取所有变量
Session::has('users') 检查一个变量是否在Session中存在
Session::forget('key'); Session中删除一个变量
Session::flush(); Session中删除所有变量
补充:session方法也可以在视图中使用,如:{{ Session::get('code')}};
缓存操作
主要方法:
Cache::put()
Cache::get()
Cache::add()
Cache::pull()
Cache::forever()
Cache::forget()
Cache::has()
系统默认是使用文件缓存,其缓存文件存储的位置位于(storage/framework/cache/data)