Laravel 小结

摘要:Laravel 小结

速查表

https://cs.laravel-china.org/#

加密

目前常用的不可逆加密算法有以下几种:
---
一次MD5(使用率很高)
将密码与一个随机串进行一次MD5
两次MD5,使用一个随机字符串与密码的md5值再进行一次md5,使用很广泛
PBKDF2算法
bcrypt
其它加密算法
---
通常推荐使用 bcrypt 或 PBKDF2 这两种算法来对密码进行加密
无论是bcrypt还是PBKDF2都有各自的忠实拥护者。另外bcrypt不支持超过55个字符的密码短语。
技术还是需要不断地积累,不然只会用前三种。T.T,之后有空继续增加详细解说。

加密解密

encrypt  decrypt (可逆的)

安装指定版本的laravel框架:

composer create-project laravel/laravel=5.0.* demo --prefer-dist

laravel中自动加载自定义的类

首先我们先创建一个文件夹来存放我们类库
mkdir app/Libs
我们在这个文件夹下创建自己的类
app/Libs/Demo.php
接着我们需要将这个类使用psr-4标准自动加载
在项目的更目录的composer.json中"autoload-dev"里的"psr-4"添加"app\\Libs\\": "app/Libs/"
接着需要执行以下命令
composer dump-autoload
这是我们找到
vendor/composer/autoload_psr4.php中看是否多了
'app\\Libs\\' => array($baseDir . '/app/Libs'),
接下来你就可以use App\Libs\Demo
可以使用你在demo里写的方法了。

创建指定目录下的控制器

使用双引号或转义。
php artisan make:controller "api\TestController"
php artisan make:controller api\\TestController

Laravel中统计(失败了)

https://laravel-china.org/index.php/articles/7637/statistics-of-the-number-of-times-in-laravel

Laravel-China中的视频免费的

https://laravel-china.org/courses/laravel-package/2232/laravel-user-agent-easily-identifies-client-information-jenssegersagent

软删除

在使用全局Scope或者软删除字段的时候  想做个回收站对删除的信息进行处理,这时候会报错
期初以为是全局Scope将删除的字段-1对应的信息给屏蔽了,后来测试后不行,又改用了删除模版还是不行
最后发现是依赖注入的问题 当时使用了Post $post 只需要改成使用Request $request就可以解决办法  

上传图片的时候拿不到路径,因为没有创建软连接

php artisan storage:link

利用SMTP发送邮件

报错必须返回一个relationship instance

一般是因为模型中定义的方法忘记写return了

Collection为空的时候在模版中的判断

在使用Laravel Eloquent模型时,我们可能要判断取出的结果集是否为空,但我们发现直接使用is_null或empty是无法判段它结果集是否为空的。
var_dump之后我们很容易发现,即使取到的空结果集, Eloquent仍然会返回Illuminate\Database\Eloquent\Collection对象实例。
其实,Eloquent已经给我们封装几个判断方法。
$result = Model::where(...)->get();
//不为空则
if ($result->first()) { } 
if (!$result->isEmpty()) { }
if ($result->count()) { }

### 在控制器里面打印有collection,在blade模版中报错说不存在只能说明是拼写错了

session不起作用

情景:
在方法a中使用全局辅助函数session()设置了session但是在方法b中无法打印。 
查看使用的是file驱动,同时文件也没有写入成功。
排查web中间件已经启动的session
最终定位是应为有dd存在。
是laravel对session存储流程的一个优化点,laravel为了防止在一次调用controller中session被多次加载,故在laravel中不是每次put都启动一次session,把当前值写入session文件的,这样读写操作会导致IO操作过于频繁,影响性能,laravel框架会在发送响应信息之前保存session。如果在中途出现了dd();die();exit();等提前中止会话的操作,session将无法自动写进文件

查看SQL

DB::enableQueryLog();
业务逻辑
 response()->json(DB::getQueryLog());
这里是发现create的时候个别字段没有了,所以要打印出来查看,最后发现是$fillable 过滤掉了

Auth 验证

\Auth::attempt(['platform_uid'=>$platform_uid,'password'=>$platform_type],0)
其中password是必须的并且是未加密后的才可以。
前面的默认是email但是也可以是其他的

匹配全部路由(具体业务逻辑有待验证)

//Route::get('/{path}', function (\Illuminate\Http\Request $request) {
//    //拿到路由,查数据库/缓存,想怎么渲染就怎渲染
//    return $request->getPathInfo();
//})->where('path', '.*');

//Route::any('/{controller?}/{action?}', function($controller='', $action=''){
//    if (empty($controller)) {
//        return 'welcome!';
//    }else {
//        $controller = "App\\Http\\Controllers\\User\\".ucfirst($controller).'Controller';
//        return App::make($controller)->$action();
//    }
//});
评论