laravel吐槽系列之一
吐槽点:laravel的vendor引用的组件过多
➜ laravel composer create-project laravel/laravel test --prefer-dist
Installing laravel/laravel (v4.2.0)
- Installing laravel/laravel (v4.2.0)
Downloading: % Created project in test
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/translation (v2.5.4)
Downloading: % - Installing psr/log (1.0.)
Downloading: % - Installing symfony/security-core (v2.5.4)
Downloading: % - Installing symfony/debug (v2.5.4)
Downloading: % - Installing symfony/http-foundation (v2.5.4)
Downloading: % - Installing symfony/event-dispatcher (v2.5.4)
Downloading: % - Installing symfony/http-kernel (v2.5.4)
Downloading: % - Installing symfony/routing (v2.5.4)
Downloading: % - Installing symfony/process (v2.5.4)
Downloading: % - Installing symfony/finder (v2.5.4)
Downloading: % - Installing symfony/console (v2.5.4)
Downloading: % - Installing symfony/filesystem (v2.5.4)
Downloading: % - Installing symfony/dom-crawler (v2.5.4)
Downloading: % - Installing symfony/css-selector (v2.5.4)
Downloading: % - Installing symfony/browser-kit (v2.5.4)
Downloading: % - Installing swiftmailer/swiftmailer (v5.2.2)
Downloading: % - Installing stack/builder (v1.0.2)
Downloading: % - Installing predis/predis (v0.8.7)
Downloading: % - Installing phpseclib/phpseclib (0.3.)
Downloading: % - Installing patchwork/utf8 (v1.1.25)
Downloading: % - Installing nesbot/carbon (1.13.)
Downloading: % - Installing monolog/monolog (1.10.)
Downloading: % - Installing nikic/php-parser (v0.9.5)
Downloading: % - Installing jeremeamia/superclosure (1.0.)
Downloading: % - Installing ircmaxell/password-compat (1.0.)
Downloading: % - Installing d11wtq/boris (v1.0.8)
Downloading: % - Installing classpreloader/classpreloader (1.0.)
Downloading: % - Installing filp/whoops (1.1.)
Downloading: % - Installing laravel/framework (v4.2.9)
Downloading: % symfony/translation suggests installing symfony/config ()
symfony/translation suggests installing symfony/yaml ()
symfony/security-core suggests installing symfony/validator (For using the user password constraint)
symfony/security-core suggests installing symfony/expression-language (For using the expression voter)
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/http-kernel suggests installing symfony/class-loader ()
symfony/http-kernel suggests installing symfony/config ()
symfony/http-kernel suggests installing symfony/dependency-injection ()
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
symfony/routing suggests installing symfony/yaml (For using the YAML loader)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
predis/predis suggests installing ext-phpiredis (Allows faster serialization and deserialization of the Redis protocol)
phpseclib/phpseclib suggests installing ext-mcrypt (Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.)
phpseclib/phpseclib suggests installing ext-gmp (Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.)
phpseclib/phpseclib suggests installing pear-pear/PHP_Compat (Install PHP_Compat to get phpseclib working on PHP < 4.3..)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing raven/raven (Allow sending log messages to a Sentry server)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
laravel/framework suggests installing doctrine/dbal (Allow renaming columns and dropping SQLite columns.)
Writing lock file
Generating autoload files
Mcrypt PHP extension required.
Script php artisan clear-compiled handling the post-install-cmd event returned with an error
解决办法:忍
吐槽点:laravel的路由可以写function
解决办法:团队自行做一些规定来限制路由的功能。
吐槽点:laravel没有默认路由
Route::get('login', ['as' => 'login', 'uses' => 'UserController@login']);
Route::controller('series', 'SeriesController’);
解决办法:多使用Route::controller
吐槽点:日志记录信息太多了

解决方法:自定义日志编辑类
<?php
namespace Yejiafneng\Helpers; use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Illuminate\Log\Writer; class BLogger
{
// 所有的LOG都要求在这里注册
const LOG_ERROR = 'error';
const LOG_SHOP = 'shop';
const LOG_QUERY = 'query';
const LOG_LOGIN = 'login'; private static $loggers = array(); // 获取一个实例
public static function getLogger($type = self::LOG_ERROR, $day = )
{
if (empty(self::$loggers[$type])) {
self::$loggers[$type] = new Writer(new Logger($type));
}
$log = self::$loggers[$type];
$log->useDailyFiles(storage_path().'/logs/'. $type .'.log', $day);
return $log;
}
}
然后在app/start/global.php中修改错误日志回调函数为:
// 错误日志信息
App::error(function(Exception $exception, $code)
{
// 如果没有路径就直接跳转到登录页面
if ($exception instanceof NotFoundHttpException) {
return Redirect::route('login');
} Log::error($exception); $err = [
'message' => $exception->getMessage(),
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'code' => $exception->getCode(),
'url' => Request::url(),
'input' => Input::all(),
];
BLogger::getLogger(BLogger::LOG_ERROR)->error($err);
});

吐槽点:ORM的where太弱
Student::where('female', )
->where('teacher_id', )
->where('class_id', )
->get();
解决办法:在基类中扩展一个multiwhere
// 多where
public function scopeMultiwhere($query, $arr)
{
if (!is_array($arr)) {
return $query;
} foreach ($arr as $key => $value) {
$query = $query->where($key, $value);
}
return $query;
}
Student::multiwhere([‘female’=>, ’teacher_id’ => , ‘class_id’ => ])->get();
一下子腰也不酸了,头也不疼了。。。
后记
laravel还是能让一个phper学习到很多的,我努力着爱之深责之切的原则,后续使用laravel中使用不爽的地方再继续吐槽和讨论。
laravel吐槽系列之一的更多相关文章
- Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】
Laravel 5 系列入门教程(一)[最适合中国人的 Laravel 教程] 分享⋅ johnlui⋅ 于 2年前 ⋅ 最后回复由 skys215于 11个月前 ⋅ 17543 阅读 原文发表在 ...
- Laravel 4 系列入门教程(一)
默认条件 本文默认你已经有配置完善的PHP+MySQL运行环境,懂得PHP网站运行的基础知识.跟随本教程走完一遍,你将会得到一个基础的包含登录的简单blog系统,并将学会如何使用一些强大的Larave ...
- Laravel 5系列教程五:MVC的基本流程
免费视频教程地址https://laravist.com/series/laravel-5-basic 期间受到很多私事影响,终于还是要好好写写laravel的教程了. 上一篇我们说了数据库和Eloq ...
- Laravel 5系列教程六:表单 Forms
免费视频教程地址https://laravist.com/series/laravel-5-basic 在开始之前,我们把界面先美化一点点先: 首先到https://github.com/JellyB ...
- Laravel 5系列教程四:数据库和Eloquent
免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇写了一些Laravel Blade的基本用法和给视图传递变量的几种方式, 这一节我们来说说 ...
- Laravel 5系列教程二:路由,视图,控制器工作流程
免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel ...
- Laravel 5 系列教程三:视图变量传递和Blade
免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇我们简单地说了Router,Views和Controllers的工作流程,这一次我就按照上 ...
- laravel进阶系列--通过事件和事件监听实现服务解耦
简介 Laravel 事件提供了简单的观察着模式实现,允许你订阅和监听应用中的事件.事件类通常存放在 app/Events 目录. 监听器存放在 app/Listeners. 如果你在应用中没有看到这 ...
- techiediaries网站的Laravel 6系列教程
Laravel 6 Tutorial & New Features - Build a CRM [PART 1] Laravel 6 REST API CRUD Tutorial - Buil ...
随机推荐
- js下的面向对象
本文记录了一种Javascript的面向对象方法及原理理解,示例代码如下: //构造函数 var MClass = function(value1, value2) { this.member = & ...
- 使用DBUnit框架数据库插入特殊字符失败的查错经历
本文记录的是使用DBUnit测试框架进行数据库数据插入时,插入特殊字符失败的查错经历.希望能对向我这样的小白同学们在遇到类似问题时,能够有一些启发.背景:在写跟数据库交互模块的单元测试,数据库表中的e ...
- AWS助理架构师认证考经
上周考了亚马逊的解决方案架构师-助理级别的认证考试并顺利通过.这也算是对自己AWS服务熟悉程度的一种检验.在准备考试的过程中,把自己学习到的AWS知识都梳理了一遍,也算是收获颇丰.这次特意分享了该认证 ...
- Visual Studio 2015速递(1)——C#6.0新特性怎么用
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果
先说下基本动画部分 基本动画部分比较简单, 但能实现的动画效果也很局限 使用方法大致为: #1. 创建原始UI或者画面 #2. 创建CABasicAnimation实例, 并设置keypart/dur ...
- Node Express 4.0 安装
前言 今天想要用nodejs 写个后台服务,很久之前看过node express 框架,可真当向下手安装的时候,发现好多命令都不记得了.写完后台服务,没事了,总结了下安装过程,记录一下,以便以后查阅方 ...
- paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.
paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- jQuery 滚动条 滚动到底部(下拉到底部) 加载数据(触发事件、处理逻辑)、分页加载数据
1.针对浏览器整个窗口滚动 主要代码: <script type="text/javascript"> ; function GetProductListPageFun ...
- Android ListView 常用技巧
Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...
- PHP_01之PHP概述、数据、语法
1.定义:PHP Hypertext Preprocessor,超文本预处理器,服务器端脚本语言:2.环境:WAMP:Window+Apache+PHP+MySQL: LAMP:Linux+Apach ...