symfony laravel_symfony bundle_symfony和laravel(2)

电脑杂谈  发布时间:2019-08-26 07:04:44  来源:网络整理

View Code

一共有28个需要Install的,这个造成的结果是初始化可运行的项目大小有25M之大。

这么bigger than bigger的玩意symfony laravel,首先会带给部署上的不方便。

symfony bundle_symfony和laravel_symfony laravel

部署laravel项目的之后会有两种方法,一种是只公布除了vendor之外的项目相关的文件,然后运行composer进行vender的升级,另外一种是直接将vendor进入版本库,使用版本库的公布将所有代码发布到线上机器去。我个人倾向第二种,能把代码库中的文件直接放到服务器上能够运行的多牛逼。但是这样子,代码库就变得超大了,不大便利了。

其次,这么多的vendor导致的是文档查阅的不便于。

一个框架好用不好用,文档是一个至关重要的环节。但是引用的第三方库一多了,很多使用文档官方就没有足够详细的文档说明了,然后美其名告诉你,这个是引用第三方库的,给你个链接,你去第三方库的表明文档中看把。但是你要知道,在开发过程中,文档是应该有统一性的,每一个说明文档的展现和查询规则都是有惯性的。你给个链接让我去一个不一样布局的网站,我的认知还应该进行跳跃和查找。

laravel的路由非常强悍,强大到无敌了。比如说呢,什么controller,action啥的都是浮云,哥可以在app/route.php里面直接写上路由对应的funciton,啥controller都不用写了,一个文件可以do everything。但是,什么都能做的框架就是把规则的建立推给使用者。比如在route中可以允许写function,我第一次看到的时侯觉得浑身都不对了,一个制定路由的文件,你就制定哪个路由到哪个action就好,干毛在一个叫route.php的文件里边,制定详细的执行方式。我估摸很多团队就会承诺不允许在route里面写funciton,因为这样就个路由的修改就很鸡肋了。

我这里说的是包括yii中有默认路由的方法controller/action。比如user/index 默认就对应到userController 的IndexAction中去。但是在laravel中,它将这种名称依赖的默认路由去掉了。所有laravel中使用的路由都应该自动在route.php中制定诸如这样的命令:

Route::get('login', ['as' => 'login', 'uses' => 'UserController@login']);

但是特别在做后台开发的之后真是特别无法忍受,每次减少一个路由都应该在route中加入这么一条玩意。

symfony和laravel_symfony laravel_symfony bundle

最后我取折衷的方法,在后台开发的之后,多使用这样的语句:

Route::controller('series', 'SeriesController’);

这样,在controller中定义的getXXX和postXXX就能自动剖析了,就不需要那么繁琐的写route模式了。

看看默认的laravel.log中的一个错误:

我能骂脏话么,laravel中由于使用了长期的模块,导致laravel的堆栈非常长,然后呢,错误日志中就把堆栈打印起来了,汗,上面那么多的出错信息,竟然没有记录当前的请求URL和请求参数。看着这么多错误信息的日志,我貌似无言以对,我需要看哪里,去哪里找出这个出错呢?

对于日志传输,laravel使用monlog,虽然说是很强大了,但是它也有个难题,就是如果你想要让日志记录到不同日志文件实现出来比较复杂。首先你可能会想到使用useFiles或者useDailyFiles来记录到不同的文件,但是Log是Facade模式的,一旦修改了useFile,你还要修改出来才行。其次,你可能会想到使用这个文章中的方式:

symfony bundle_symfony laravel_symfony和laravel

,new一个,再Info,好吧,实际之后我也有用类似的方式封装了下。最后,你的技巧可能就是写个log的ServiceProvider,覆盖或者重写原先的哪个Log。

总之达成目的的方式一定不止一个,but,总之,原先的哪个Log还是不爽。

首先自定义了日志编辑类:

<?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 = 30)
    {
        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);
});

这里没有修改laravel自身的出错日志记录,因为保留一个全集的错误需要还是有必要的,但是实际上我使用过程中只要看自己定义的error.log就足够了

symfony laravel_symfony bundle_symfony和laravel

laravel的ORM使用的是Eloquent ORM。如果你要获得出Student表中female=1 并且 teacher_id为4 并且class_id为3的所有学生,你应该这么写:

Student::where('female', 1)
->where('teacher_id', 4)
->where('class_id', 3)
->get();

好难受,如果一个还行,要是多个呢?。。。难道就不能在一个where中使用个数组么?

于是我就在BaseModel中定义了:

    // 多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’=>1, ’teacher_id’ => 4, ‘class_id’ => 3])->get();

一下子腰也不酸了,头也不疼了。。。

laravel还是能让一个phper学习到好多的,我拼命着爱之深责之切的方法,后续使用laravel中使用不爽的地方再继续抱怨和争论。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-120624-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 孙旭聪
      孙旭聪

      晚安

    • 付文博
      付文博

      而且这次派出的052D也是旧军舰了

    • 严复
      严复

      稍微有点知识的人是不会相信长蛆的

    热点图片
    拼命载入中...