精华内容
下载资源
问答
  • 搭建Laravel框架流程

    千次阅读 2014-10-23 18:51:50
    1.搭建LAMP: 安装apache2:sudo apt-get install ...10.打开laravel主目录(composer.josn目录)运行:composer install 自动安装文件 11.输入127.0.0.1/laravel/public得到图: you have arrived

    1.搭建LAMP:

    安装apache2:sudo apt-get install apache2

    安装php5:          sudo apt-get install php5

    安装(配置APACHE+PHP):apt-get install libapache2-mod-php5

    安装mysql: apt-get install mysql-server

    安装(apache、php支持 mysql):apt-get install libapache2-mod-auth-mysql

    安装php5-mysql:            apt-get install php5-mysql


    2.升级php5至php5.5高版本:

    sudo add-apt-repository ppa:ondrej/php5  
    sudo apt-get update  
    sudo apt-get upgrade
    sudo apt-get install php5

    3.安装 mcypt php extension

    apt-get install php5-mcrypt php5-dev
    3.1将配置文件链接给 PHP(有就不用了)
    
    ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available
    3.2开启Mcrypt模块:
     php5enmod mcrypt
    4.配置apche: vi/etc/apache2/apache2.conf 把None改成All 把denied改成granted
                 cd /etc/apache2/sites-available
                 vi 000-default.conf
                 把DocumentRoot /var/www/html 去掉/html
    5.开启apache2 rewrite功能:a2enmod rewrite
    6.开启php管理:a2enmod php5(相当与php-fpm)
    
    7.下载composer.phar
    8.下载laravel包,解压包到/var/www/下
    9.cp composer.phar composer,把composer改成composer
    10.打开laravel主目录(composer.josn目录)运行:composer install
       自动安装文件
    11.输入127.0.0.1/laravel/public得到图:
    you have arrived
    



    展开全文
  • 主要介绍了laravel 框架执行流程与原理,结合实例形式分析了laravel框架基本执行流程、原理及相关操作技巧,需要的朋友可以参考下
  • Laravel框架执行流程

    千次阅读 2017-04-13 15:37:09
    俗话说知己知彼百战不怠,使用Laravel也有有一段时间了,中间也踩了很多坑,碰了很多壁,归根结底还是对Laravel的底层不太了解,以前使用Thinkphp养成的MVC的习惯,刚接触Laravel一...研究了下Laravel框架的执行流程

    俗话说知己知彼百战不怠,使用Laravel也有有一段时间了,中间也踩了很多坑,碰了很多壁,归根结底还是对Laravel的底层不太了解,以前使用Thinkphp养成的MVC的习惯,刚接触Laravel一时还没转变过来,所以最近抱着学习的态度,研究了下Laravel框架的执行流程。
    Laravel虽然使用上感觉跟Thinkphp差不多,但是底层的实现方式还有框架的架构,跟Thinkphp差别还是蛮大,不过Tp5貌似吸收了很多Laravel中的特性。
    废话到此为止,下面上干货

    1. 入口文件index.php

    1. 引入bootstrap/autoload.php,自动加载依赖库

    2. 引入bootstrap/app.php’

    1. 创建容器$app
    // 参数为应用程序根目录
    $app = new Illuminate\Foundation\Application(
        realpath(__DIR__.'/../') 
    );
    1. 该类是框架核心类,负责启动框架,以及调动其他类提供的功能。
    2. 该类继承了Illuminate\Container\Container类,可见该类也是个容器。是整个框架最大的容器;
    3. 该类的构造器代码如下:
    
    public function __construct($basePath = null)
    {
        if ($basePath) {
            // 设置应用程序根目录
            $this->setBasePath($basePath);
        }
    
        // 注册基础绑定服务
        // 1. 设置当前类为容器实例
        // 2. 设置实例别名为app
        $this->registerBaseBindings();
    
    
        // 注册基础服务提供商
        // 1. 注册事件服务提供商
        // 2. 注册日志服务提供商
        // 3. 注册路由服务提供商
        $this->registerBaseServiceProviders();
    
    
        // 注册核心容器别名
        // 为一些核心类设置别名,
        // 存储在父类的$aliases和abstractAliases属性数组中。
        // $aliases 为 别名 => 类名 键值对
        // $abstractAliases 为 类名 => 别名 键值对
        $this->registerCoreContainerAliases();
    }
    
    1. 设置接口类的实现类,并使用单例模式实例化实现类。
    
    // 设置HTTP内核实现类
    // 配置各种中间件
    $app->singleton(
        Illuminate\Contracts\Http\Kernel::class,
        App\Http\Kernel::class
    );
    
    // 设置Console内核实现类
    $app->singleton(
        Illuminate\Contracts\Console\Kernel::class,
        App\Console\Kernel::class
    );
    
    // 设置异常处理实现类
    $app->singleton(
        Illuminate\Contracts\Debug\ExceptionHandler::class,
        App\Exceptions\Handler::class
    );
    
    1. 获得Http内核Kernel的示例
    
    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
    1. http内核黑箱操作,接收requestresponse。这一步完整个程序的所有操作,形成一个完成的http请求,至于该请求的具体处理,则有kernel内部调度。这里是重点所在。

    2. Http响应,发送Http响应头以及响应内容,代码如下:

    
    $response->send();
    
    
    /**
     * Sends HTTP headers and content.
     * 
     * Symfony\Component\HttpFoundation\Response -> send函数
     * @return $this
     */
    public function send()
    {
        $this->sendHeaders();
        $this->sendContent();
    
        if (function_exists('fastcgi_finish_request')) {
            fastcgi_finish_request();
        } elseif ('cli' !== PHP_SAPI) {
            static::closeOutputBuffers(0, true);
        }
    
        return $this;
    }
    1. 结束所有中间件以及可终止程序
    
    $kernel->terminate($request, $response);
    
    
    /**
     * Call the terminate method on any terminable middleware.
     *
     * Illuminate\Foundation\Http\Kernel -> terminate函数
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Http\Response  $response
     * @return void
     */
    public function terminate($request, $response) {
        $this->terminateMiddleware($request, $response);
    
        $this->app->terminate();
    }

    执行流程

    1. 加载框架类库,创建容器,接收request请求。
    2. 以管道的设计模式 执行部分中间件
    3. 路由解析调度
    4. 实例化当前控制器
    5. 执行web中间件
    6. 执行控制器中间件
    7. 执行控制器操作
    8. 返回response
    9. 接收框架

    总结

    1. 以前很公共的东西都习惯放在控制器基类的构造函数中,但是在lavarvel5.3以后却不能这么做了,因为由上述执行流程可以看出,web中间件在控制器实例化之后才执行,所以在控制器构造函数执行是session还没有初始化,即在控制器构造函数中获得不了session数据。所以也就获得不了当前用户。所以导致很多操作都做不了了。但是laravel提供了可插拔形式的中间件很好的解决了这个问题。自定义中间件在web中间件之后,Action之前执行。所以很多之前放在构造函数里的操作都可以放在中间件里解决。

    2. laravel框架中使用了大量的static:: (后期静态绑定),单独看代码很难知道调用的函数时那个类的。只有在用运行的时候,才会动态计算出,调用的是那个类的函数。如下面代码:

    
    /*
    *
    * @see Illuminate\Support\Facades 
    *
    */
    public static function __callStatic($method, $args) {
        $instance = static::getFacadeRoot();
    
        if (!$instance) {
            throw new RuntimeException('A facade root has not been set.');
        }
    
        return $instance->$method(...$args);
    }

    这段代码来自 Illuminate\Support\Facades这个类。该类是一个抽象类。我们用的非常多的一个类Auth就是集成该类。
    我们都知道Auth中有很多静态函数,如:Auth::check(),Auth::user(),Auth::guest()等等,但是当我们打开Auth类的时候,发现里面并没有这些方法,而他的父类facades中也没有这些方法。只有这个__callStatic函数。从名称不难看出,这是一个静态类的魔术方法。调用所有不存在的静态方法都会调用改函数。
    从该函数的实现不难看出,该函数很像是一个工厂函数,获得当前调用函数的实例化对象,然后再调用该函数。 该函数就想是单入口的web程序的入口文件,

    展开全文
  • laravel框架加载流程

    2021-04-26 14:09:32
    生成Laravel应用程序实例 $app 并且绑定核心 AppHttpKernel::class 或 AppConsoleKernel::class 这取决于请求类型 在这里请求经过一些列操作 最终返回浏览器 app/Http/Kernel.php 一般情况是 HTTP 请求,所以.

    在这里插入图片描述
    public/index.php

    此文件会加载由 Composer 生成的自动加载器定义
    并获取由 bootstrap/app.php 文件中所生成的 Laravel 应用程序实例

    bootstrap/app.php

    生成Laravel应用程序实例 $app
    并且绑定核心 AppHttpKernel::class 或 AppConsoleKernel::class
    这取决于请求类型 在这里请求经过一些列操作 最终返回浏览器

    app/Http/Kernel.php

    一般情况是 HTTP 请求,所以主要说些这个
    这个类继承自 IlluminateFoundationHttpKernel 它定义了一个 bootstrappers 数组,在请求被运行前会先行运作。这些启动器设置了错误处理、日志记录、侦测应用程序环境,并运行其它需要在请求实际处理前就该被完成掉的工作。
    其实这个过程就是 启动框架的服务提供者 -> IlluminateFoundationBootstrapBootProviders 这个继承自 IlluminateContractsFoundationApplication 但是实现却是一开始的 IlluminateFoundationApplication 也就是创建框架实例那个文件里 有这个方法 (有点搞不懂 继承自一个接口,接口没有功能,自己也没有功能,而下面实现这个功能的又没有继承他 那如何找到这个功能的呢) 看这里接口说明
    app/Http/Kernel.php
    HTTP 核心也定义了一份 HTTP 中间件 清单,所有的请求在被应用程序处理之前都必须经过它们。这些中间件处理 HTTP session 的读写、验证 CSRF 令牌、决定应用程序是否处于维护模式,以及其它更多任务作。

    router

    所有服务提供者加载完毕后,把request请求转移给router路由器
    经过router分派给route(路由)或者controller,并运行中间件处理后返回response(响应)

    在这里插入图片描述
    整个启动流程,主要涉及的几个文件如下
    public/index.php,bootstrap/app.php,app/Http/Kernel.php,
    除了Kernel另外两个文件去掉注释,基本很简洁

    public/index.php

    require __DIR__.'/../bootstrap/autoload.php';
    
    //启动框架,生成应用程序
    $app = require_once __DIR__.'/../bootstrap/app.php';
    
    //运行应用程序,接收Request请求
    $kernel = $app->make(IlluminateContractsHttpKernel::class);
    
    //经过路由器分发到路由,控制器,中间件的处理返回Response
    $response = $kernel->handle(
        $request = IlluminateHttpRequest::capture()
    );
    //发送响应到浏览器
    $response->send();
    //销毁请求与响应
    $kernel->terminate($request, $response);
    

    bootstrap/app.php

    //创建应用程序
    $app = new IlluminateFoundationApplication(
        realpath(__DIR__.'/../')
    );
    
    //重要的接口绑定 (会根据不同请求,做不同响应.所以主要说下Http)
    $app->singleton(
        IlluminateContractsHttpKernel::class,
        AppHttpKernel::class
    );
    
    $app->singleton(
        IlluminateContractsConsoleKernel::class,
        AppConsoleKernel::class
    );
    
    $app->singleton(
        IlluminateContractsDebugExceptionHandler::class,
        AppExceptionsHandler::class
    );
    
    //返回应用程序
    return $app;
    

    app/Http/Kernel.php

    namespace Http;
    
    use IlluminateFoundationHttpKernel as HttpKernel;
    
    //这里需要说明下,Kernel继承自HttpKernel也就是框架基础核心.
    //基础核心主要作用就是,加载这里配置的中间件,还有就是启动框架的各种服务
    //因为该文件内容较多就不展示了,可以自己稍微看一下
    class Kernel extends HttpKernel
    {
        //设置了全局中间件
        protected $middleware = [
            IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
            AppHttpMiddlewareEncryptCookies::class,
            IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
            IlluminateSessionMiddlewareStartSession::class,
            IlluminateViewMiddlewareShareErrorsFromSession::class,
            AppHttpMiddlewareVerifyCsrfToken::class,
        ];
    
        //设置了路由中间件
        protected $routeMiddleware = [
            'auth' => AppHttpMiddlewareAuthenticate::class,
            'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
            'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
            'test'=> AppHttpMiddlewareTestMiddleware::class,
            'mi'=> AppHttpMiddlewareMiMiddleware::class,
        ];
    }
    

    结合图片就大致了解,laravel的启动过程.

    通过上面注释文件,估计大多数悟性爆表的同学已经明白整个过程了.还有极少数晕乎少年没有明白.这里再多说几句.

    其实整个流程就三部 全部在index.php这个文件里

    • 启动框架

    这个是由 app.php做到的 并准备好中间 服务待用

    • 创建http内核

    • 响应请求

    展开全文
  • Laravel框架中有很多值得学习和推荐的思想,其中有组件化开发,IoC容器和分布式应用架构设计这三部分更是核心中的核心。 在这个三部分中组件化开发相对来说一个比较简单的部分,可以先了解这部分内容,再深入学习。...
  • 主要介绍了Laravel框架生命周期与原理,结合实例形式总结分析了Laravel框架针对用户请求响应的完整运行周期、流程、原理,需要的朋友可以参考下
  • Laravel框架异步队列配置流程

    千次阅读 2016-04-15 11:20:34
    本文使用的laravel框架是4.0版本首先说一下什么是异步操作,一般什么情况下需要使用异步操作。(这里我们使用简单通俗的表述,大致明白其意思,非官方定义。可以自己进一步上网查阅更加详细的描述)。在我的理解,...
  • 主要介绍了Laravel框架实现的rbac权限管理操作,结合实例形式分析了Laravel框架权限控制rbac相关数据库创建、读写及权限判断等操作技巧,需要的朋友可以参考下
  • yii2运行流程及与laravel框架比较

    千次阅读 2020-10-11 17:48:02
    一、yii2框架与laravel框架的比较 1.开发速度:两者差不多,yii2有gii脚手架,laravel有artisan 2.代码可读性:yii2代码可读性比laravel好得多 3.开源生态圈:laravel社区比yii2社区活跃,第三方工具多 二、...
  • laravel框架的安装

    2016-09-12 07:52:27
    laravel框架的安装全局安装 laravel new blog 局部安装 composer create-project –prefer-dist laravel/laravel demo
  • laravel5.6流程

    2018-09-11 14:04:52
    laravel5.6流程!!
  • PHP-laravel框架学习笔记

    万次阅读 2021-03-22 14:14:05
    Laravel 是灵活的 php web 开发框架,tp5 和 laravel 有一定相似之处 ...安装 首先安装 composer,进入目录打开 cmd,执行命令即可 composer create-project laravel/laravel=5.6....laravel 同样属于 mvc 框架Laravel
  • 听说过Laravel近几年很火,之前也接触过YII2...现在公司计划转向Laravel框架,废话少说,赶紧学起来。 Laravel框架,当然也是一个基于composer工具管理依赖包的。初看Laravel框架代码就可以发现,整体架构耦合度小 ...
  • Laravel框架学习笔记001

    2016-12-03 17:09:09
    一起来学Laravel框架
  • 本文实例讲述了laravel 框架执行流程与原理。分享给大家供大家参考,具体如下:1.index.php$app = require_once __DIR__.'/../bootstrap/app.php';$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,924
精华内容 1,169
关键字:

laravel框架流程