Laravel相关的一些故障解决
禁止全局csrf认证
在app/Http/Kernel.php中,$middleware表示全局中间件,而$routeMiddleware表示针对某个路由的中间件,所以只需要把csrf在$middleware中注释掉,然后在$routeMiddleware中添加'csrf'=>'App\Http\Middleware\VerifyCsrfToken'
如果要在某个路由上使用就这样:
Route::group(['middleware'=>'csrf'],function(){//csrf保护的接口 Route::get('/','HomeController@index'); }
处理上传文件
$file=Input::file('upload_file");//获取上传文件对象 $file->isValid()//检验文件是否有效 $file->getClientOriginalName();//获取文件原名 $file->getFileName();//获取上传后缓存的文件的名字 $file->getRealPath();//获取缓存文件的绝对路径 $file->getClientOriginalExtension();//获取上传文件的后缀 $file->getMimeType();//获取上传文件的MIME类型 $file->getSize();//获取上传文件的大小
手动清理配置缓存
phpartisanconfig:cache
插入数据的时候出现MassAssignmentExceptioninLaravel错误
需要给数据表设置可访问的字段,在Model里面
protected$fillable=array('字段1','字段2');
phpartisandb:seed出现[ReflectionException]ClaxxXXXTableSeederdowsnotexist错误
这是因为新增加了文件但是composer没有感知到,需要先执行composerdump-autoload
定义/修改字段类型为timestamp时出现错误:”Unknowncolumntype“timestamp”requested.”
按照[HowdoImakedoctrinesupporttimestampcolumns?]的做法,目前最简单的方式是直接用DB::statement()来写SQL语句
POST数据的时候出现Thepayloadisinvalid
我遇到这个情况是因为在做复杂的表单提交,直接提取X-XSRF-TOKEN的值,但是由于没有转移,导致后端token揭秘失败
保存model的时候出现错误:Missingargument2forIlluminate\Database\Eloquent\Model::setAttribute()
一般是Model的几个属性没有设正确,检查这几个值incrementing/timestamps/primarykey/fillable
队列出现CannotinitializeaMULTI/EXECtransactionoveraggregateconnections
升级到最新版laravel吧,然后将redis的扩展切换到phpredis,laravel5.3之前自带的predis不支持redis的sentinel,并且有些redis操作强依赖于predis的事务操作,各种纠结,最后都不能成功。或者自己写类似的中间件
Class‘Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory'notfound
偶尔安装了某些个第三方库会出现这种幺蛾子,可以用这种方式解决composerrequiresymfony/psr-http-message-bridge
更新表时出现AH00052:childpid71exitsignalSegmentationfault(11)
原因可能是没有设置主键而直接在该表上面更新数据,导致ORM不知道到底该更新谁。并且Laravel不支持复合主键(https://github.com/laravel/framework/issues/5517,作者不支持这种做法)。这种情况,要么给该表添加唯一主键,要么只能用where直接更新了。
Errorwhilereadinglinefromserver
Predis需要设置read_write_timeout=0或者-1,特别是daemon任务,最好设置不超时
PHPFatalerror:Uncaughtexception'ReflectionException'withmessage'Classlogdoesnotexist'in/Users/freek/dev/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php
出现于5.2版本中,原因是.env文件中的配置的值,中间存在空格,如果中间有空格,需要将值用双引号包起来
Classenvdoesnotexist/Classrequestdoesnotexist
通常出现在框架还未加载完成就报错,但是在处理错误的时候却使用了env()/request()这个功能,导致没有打印真实的错误。处理方式,一是不要使用app()->environment('...'),而是检查.env文件中是否有错误,例如包含空格的值,必须用双引号包围。我在自定义ExceptionHandler中遇到过几次
Thegivendatafailedtopassvalidation
认证出错却不知道具体错在哪里并且状态码是500,如果有用DingoAPI,那么注意Request不要继承useIlluminate\Foundation\Http\FormRequest而应该是useDingo\Api\Http\FormRequest
CalltoundefinedmethodsetHidden
注意command的主逻辑不是fire而应该是handle
启动时报错Unknown:failedtoopenstream:NosuchfileordirectoryinUnknownonline0
可能是错误地删除了server.php文件,可以直接自己写一个:
/** *Laravel-APHPFrameworkForWebArtisans * *@packageLaravel *@authorTaylorOtwell*/ $uri=urldecode( parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH) ); //ThisfileallowsustoemulateApache's"mod_rewrite"functionalityfromthe //built-inPHPwebserver.ThisprovidesaconvenientwaytotestaLaravel //applicationwithouthavinginstalleda"real"webserversoftwarehere. if($uri!=='/'&&file_exists(__DIR__.'/public'.$uri)){ returnfalse; } require_once__DIR__.'/public/index.php';
composerinstall时报错:Pleaseprovideavalidcachepath
需要手动创建缓存目录,在storage/framwork下面新建sessions、views、cache文件夹即可
总结
到此这篇关于Laravel相关的一些故障解决的文章就介绍到这了,更多相关Laravel故障解决内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。