当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel相关的一些故障解决

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-23 09:27:56 浏览: 评论:0 

这篇文章主要给大家介绍了关于Laravel相关的一些故障的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。

禁止全局csrf认证

在app/Http/Kernel.php中,$middleware表示全局中间件,而$routeMiddleware表示针对某个路由的中间件,所以只需要把csrf在$middleware中注释掉,然后在$routeMiddleware中添加'csrf' => 'App\Http\Middleware\VerifyCsrfToken'

如果要在某个路由上使用就这样:

  1. Route::group(['middleware' => 'csrf'], function(){   // csrf保护的接口 
  2.   Route::get('/''HomeController@index'); 

处理上传文件

$file = Input::file('upload_file");// 获取上传文件对象

$file->isValid()          // 检验文件是否有效

$file->getClientOriginalName();  // 获取文件原名

$file->getFileName();       // 获取上传后缓存的文件的名字

$file->getRealPath();       // 获取缓存文件的绝对路径

$file->getClientOriginalExtension();// 获取上传文件的后缀

$file->getMimeType();       // 获取上传文件的MIME类型

$file->getSize();         // 获取上传文件的大小

手动清理配置缓存

php artisan config:cache

插入数据的时候出现MassAssignmentException in Laravel错误

需要给数据表设置可访问的字段,在Model里面

protected $fillable = array('字段1', '字段2');

php artisan db:seed出现[ReflectionException] Claxx XXXTableSeeder dows not exist错误

这是因为新增加了文件但是composer没有感知到,需要先执行composer dump-autoload

定义/修改字段类型为timestamp时出现错误:”Unknown column type “timestamp” requested.”

按照[How do I make doctrine support timestamp columns?]的做法,目前最简单的方式是直接用DB::statement()来写SQL语句

POST数据的时候出现The payload is invalid

我遇到这个情况是因为在做复杂的表单提交,直接提取X-XSRF-TOKEN的值,但是由于没有转移,导致后端token揭秘失败

保存model的时候出现错误:Missing argument 2 for Illuminate\Database\Eloquent\Model::setAttribute()

一般是Model的几个属性没有设正确,检查这几个值incrementing/timestamps/primarykey/fillable

队列出现Cannot initialize a MULTI/EXEC transaction over aggregate connections

升级到最新版laravel吧,然后将redis的扩展切换到phpredis,laravel5.3之前自带的predis不支持redis的sentinel,并且有些redis操作强依赖于predis的事务操作,各种纠结,最后都不能成功。或者自己写类似的中间件

Class ‘Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory' not found

偶尔安装了某些个第三方库会出现这种幺蛾子,可以用这种方式解决composer require symfony/psr-http-message-bridge

更新表时出现AH00052: child pid 71 exit signal Segmentation fault (11)

原因可能是没有设置主键而直接在该表上面更新数据,导致ORM不知道到底该更新谁,并且Laravel不支持复合主键(https://github.com/laravel/framework/issues/5517,作者不支持这种做法)。这种情况,要么给该表添加唯一主键,要么只能用where直接更新了。

Error while reading line from server

Predis需要设置read_write_timeout=0或者-1,特别是daemon任务,最好设置不超时

PHP Fatal error: Uncaught exception 'ReflectionException' with message 'Class log does not exist' in /Users/freek/dev/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php

出现于5.2版本中,原因是.env文件中的配置的值,中间存在空格,如果中间有空格,需要将值用双引号包起来

Class env does not exist / Class request does not exist

通常出现在框架还未加载完成就报错,但是在处理错误的时候却使用了env()/request()这个功能,导致没有打印真实的错误。处理方式,一是不要使用app()->environment('...'),而是检查.env文件中是否有错误,例如包含空格的值,必须用双引号包围。我在自定义ExceptionHandler中遇到过几次

The given data failed to pass validation

认证出错却不知道具体错在哪里并且状态码是500,如果有用Dingo API,那么注意Request不要继承use Illuminate\Foundation\Http\FormRequest而应该是use Dingo\Api\Http\FormRequest

Call to undefined method setHidden

注意command的主逻辑不是fire而应该是handle

启动时报错Unknown: failed to open stream: No such file or directory in Unknown on line 0

可能是错误地删除了server.php文件,可以直接自己写一个:

  1. /** 
  2.  * Laravel - A PHP Framework For Web Artisans 
  3.  * 
  4.  * @package Laravel 
  5.  * @author  Taylor Otwell <taylor@laravel.com> 
  6.  */ 
  7.  
  8. $uri = urldecode( 
  9.   parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 
  10. ); 
  11.  
  12. // This file allows us to emulate Apache's "mod_rewrite" functionality from the 
  13. // built-in PHP web server. This provides a convenient way to test a Laravel 
  14. // application without having installed a "real" web server software here. 
  15. if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 
  16.   return false; 
  17.    
  18. require_once __DIR__.'/public/index.php'

composer install时报错: Please provide a valid cache path

需要手动创建缓存目录,在storage/framwork下面新建sessions、views、cache文件夹即可。

Tags: Laravel故障

分享到: