laravel基础

在Laravel框架中内置了”哈希”Hash加密单向加密方法,且同样的参数加密出的字符串是绝对不会出现相同的情况 这就提高了安全性;
在实际开发中我们常常遇到这样的问题,就是开发地点不固定,这就造成了我们需要频繁的更改数据库配置,给开发工作造成了麻烦,TP依然没有避免这个”灾难”;在laravel框架中,.env环境文件的出现解决了这个麻烦,我们只需要在不同的工作地点配置好.env文件就不必再进行配置,因为无论是git还是svn ” .env是不会随着文件一起提交到服务器的”;

image.png

image.png

image.png

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');
image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png
到此我们已经注册了视图合成器,每次渲染 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) {
    //
});
image.png

image.png

如果在你部署过程中执行 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框架的运行对环境是有严格要求的。


image.png

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)
image.png
$validator = Validator::make(需要验证的数据,验证规则)
$validator->passes() :返回true, 表示通过验证, 返回false,表示没有通过验证
$validator->failes(): 返回false, 表示通过验证, 返回true,表示没有通过验证
$errors = $validator->errors(): 返回出错信息(返回的是对象)
$errors->get('uesrname')获取指定字段的出错信息
$errors->all() 获取所有字段的出错信息(数组)
$errors->has('username') 判断指定字段是否出错 true: 指定字段出错, false:指定字段没有出错

image.png

在laravel中设置时区为中国 Aisa/Shanghai,修改config/app.php

路由中间件

image.png

注册中间件,在app/Http/Kernel.php
image.png

使用block.ip的中间件
场景:在/test25路由上应用block.ip这个中间件
image.png

给中间件传递参数
image.png

接收传给中间件的参数
image.png

Input::hasFile('file') 返回false表示用户没有提交文件,true表示用户提交了文件

自定义验证规则

在注册服务的文件中定义
app/Providers/AppServiceProvider.php文件中定义
场景:比如中文验证规则,验证给定的字符串必须是中文
核心代码: preg_match(/^[\x{2E80}-\x{9FFF}]+/u,str)

image.png

image.png

执行任意的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

image.png

->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:有错误
image.png

视图中输出特殊字符不要给我转义

应用场景:
1. 原样输出html代码


image.png

Redis

常用的redis的操作
增删改查
队列
订阅/发布


redis指令: set 参数名 参数值 过期时间
场景,把所有的角色进行json编码后保存到redis中

image.png


redis命令:get roles


image.png

image.png

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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容