精华内容
下载资源
问答
  • 对laravel框架的理解
    2021-10-08 15:07:52

    Laravel框架的入口文件public/index.php

    <?php
    
    /**
     * Laravel - A PHP Framework For Web Artisans
     *
     * @package  Laravel
     * @author   Taylor Otwell <taylor@laravel.com>
     */
    
    define('LARAVEL_START', microtime(true));
    
    /*
    |--------------------------------------------------------------------------
    | Register The Auto Loader
    |--------------------------------------------------------------------------
    |
    | Composer provides a convenient, automatically generated class loader for
    | our application. We just need to utilize it! We'll simply require it
    | into the script here so that we don't have to worry about manual
    | loading any of our classes later on. It feels great to relax.
    |
    */
    
    require __DIR__.'/../vendor/autoload.php';
    
    /*
    |--------------------------------------------------------------------------
    | Turn On The Lights
    |--------------------------------------------------------------------------
    |
    | We need to illuminate PHP development, so let us turn on the lights.
    | This bootstraps the framework and gets it ready for use, then it
    | will load up this application so that we can run it and send
    | the responses back to the browser and delight our users.
    |
    */
    
    $app = require_once __DIR__.'/../bootstrap/app.php';
    
    /*
    |--------------------------------------------------------------------------
    | Run The Application
    |--------------------------------------------------------------------------
    |
    | Once we have the application, we can handle the incoming request
    | through the kernel, and send the associated response back to
    | the client's browser allowing them to enjoy the creative
    | and wonderful application we have prepared for them.
    |
    */
    
    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
    
    $response = $kernel->handle(
        $request = Illuminate\Http\Request::capture()
    );
    
    $response->send();
    
    $kernel->terminate($request, $response);

    根据作者的注释可以知道这几行代码的作用:

    1. 定义常量记录框架启动时间。
    2. 加载composer包管理器中的自动加载器到当前命名空间(根命名空间)。
    3. 获取一个Application类的实例$app,这个实例继承了Container类,并且作为一个服务容器承担连接各种服务的功能,我们可以从这个容器获取各种服务,如日志、数据库、缓存、事件等。
    4. 调用$app的make方法获取一个kernel类,用kernel类处理请求对象(Request类的实例,包含了请求信息),之后返回一个$response来发送响应,最后调用$kernel的terminate方法结束本次请求,这样,一个完整的http请求就完成了。

            框架的启动过程在kernel调用handle方法时进行,那么启动框架到底做了什么事情?这就要深入了解下kernel类的handle方法了。
    找到kernel类文件中的handle 方法:

    /**
         * Handle an incoming HTTP request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        public function handle($request)
        {
            try {
                $request->enableHttpMethodParameterOverride();
    
                $response = $this->sendRequestThroughRouter($request);
            } catch (Exception $e) {
                $this->reportException($e);
    
                $response = $this->renderException($request, $e);
            } catch (Throwable $e) {
                $this->reportException($e = new FatalThrowableError($e));
    
                $response = $this->renderException($request, $e);
            }
    
            $this->app['events']->dispatch(
                new Events\RequestHandled($request, $response)
            );
    
            return $response;
        }

             这个方法接受一个\Illuminate\Http\Request请求类实例作为参数,然后返回一个\Illuminate\Http\Response响应类。正常请求会调用sendRequestThroughRouter方法,翻过过来就是:“将请求送往路由”,然后返回响应,如果产生异常则调用异常处理方法,将异常信息包装为响应类。接下来看下sendRequestThroughRouter方法:

    /**
         * Send the given request through the middleware / router.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        protected function sendRequestThroughRouter($request)
        {
            $this->app->instance('request', $request);
    
            Facade::clearResolvedInstance('request');
    
            $this->bootstrap();
    
            return (new Pipeline($this->app))
                        ->send($request)
                        ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
                        ->then($this->dispatchToRouter());
        }

    这个方法并不长,只有四行代码:

    1. 调用服务容器的instance方法绑定一个request实例
    2. 调用Illuminate\Support\Facades\Facade类(门面类基类)的clearResolvedInstance静态方法清除resolvedInstance属性(已解析实例)中的’request’实体。
    3. 调用bootstrap方法启动框架。
    4. new一个管道类,依次调用send、through、then方法使请求通过中间件,最后分发到路由类处理。

     看到这里,就知道框架的启动过程放在了bootstrap方法,继续看下这个方法:

    /**
         * Bootstrap the application for HTTP requests.
         *
         * @return void
         */
        public function bootstrap()
        {
            if (! $this->app->hasBeenBootstrapped()) {
                $this->app->bootstrapWith($this->bootstrappers());
            }
        }

            判断框架是否启动,未启动则调用服务容器的bootstrapWith方法,传入了kernel的bootstrappers 属性,这个属性是一个数组,数组的键值是类名,这些是在框架启动之时需要注入的类,如管理环境变量、框架配置的类,处理异常类,注册门面类,启动服务类。

    protected $bootstrappers = [
            \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
            \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
            \Illuminate\Foundation\Bootstrap\HandleExceptions::class,
            \Illuminate\Foundation\Bootstrap\RegisterFacades::class,
            \Illuminate\Foundation\Bootstrap\RegisterProviders::class,
            \Illuminate\Foundation\Bootstrap\BootProviders::class,
        ];

    继续看下服务容器的bootstrapWith方法:

    /**
         * Run the given array of bootstrap classes.
         *
         * @param  string[]  $bootstrappers
         * @return void
         */
        public function bootstrapWith(array $bootstrappers)
        {
            $this->hasBeenBootstrapped = true;
    
            foreach ($bootstrappers as $bootstrapper) {
                $this['events']->dispatch('bootstrapping: '.$bootstrapper, [$this]);
    
                $this->make($bootstrapper)->bootstrap($this);
    
                $this['events']->dispatch('bootstrapped: '.$bootstrapper, [$this]);
            }
        }
    

            在这个方法中只有几行代码,将启动属性修改为已启动,然后遍历bootstrappers 数组,启动框架的过程就是一个加载基础类的过程:发布启动事件,调用make方法实例化基础类然后调用基础类的bootstrap方法,然后发布完成启动事件。bootstrappers 数组中的类都定义在laravel源码包 的Foundation目录的子目录Bootstrap中。这些类的功能:

    1. 加载环境变量
    2. 加载配置文件
    3. 加载异常处理类
    4. 注册门面类
    5. 注册服务提供类
    6. 启动服务类

            以上就是laravel框架的启动全过程,我们在框架启动之后,还未处理请求之前调用一下框架的辅助函数dd()和app()来打印下服务容器对象: 

    protected function sendRequestThroughRouter($request)
        {
            $this->app->instance('request', $request);
    
            Facade::clearResolvedInstance('request');
    
            $this->bootstrap();
    dd(app());
            return (new Pipeline($this->app))
                        ->send($request)
                        ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
                        ->then($this->dispatchToRouter());
        }

    打印结果:

    Application {#2 ▼
      #basePath: "/vagrant/www/laravel5.8"
      #hasBeenBootstrapped: true
      #booted: true
      #bootingCallbacks: array:1 [▶]
      #bootedCallbacks: array:1 [▶]
      #terminatingCallbacks: []
      #serviceProviders: array:22 [▶]
      #loadedProviders: array:22 [▶]
      #deferredServices: array:102 [▶]
      #appPath: null
      #databasePath: null
      #storagePath: null
      #environmentPath: null
      #environmentFile: ".env"
      #namespace: null
      #resolved: array:20 [▶]
      #bindings: array:41 [▶]
      #methodBindings: []
      #instances: array:26 [▼
        "path" => "/vagrant/www/laravel5.8/app"
        "path.base" => "/vagrant/www/laravel5.8"
        "path.lang" => "/vagrant/www/laravel5.8/resources/lang"
        "path.config" => "/vagrant/www/laravel5.8/config"
        "path.public" => "/vagrant/www/laravel5.8/public"
        "path.storage" => "/vagrant/www/laravel5.8/storage"
        "path.database" => "/vagrant/www/laravel5.8/database"
        "path.resources" => "/vagrant/www/laravel5.8/resources"
        "path.bootstrap" => "/vagrant/www/laravel5.8/bootstrap"
        "app" => Application {#2}
        "Illuminate\Container\Container" => Application {#2}
        "Illuminate\Foundation\PackageManifest" => PackageManifest {#5 ▶}
        "events" => Dispatcher {#27 ▶}
        "router" => Router {#26 ▶}
        "Illuminate\Contracts\Http\Kernel" => Kernel {#30 ▶}
        "request" => Request {#43 ▶}
        "config" => Repository {#34 ▶}
        "db.factory" => ConnectionFactory {#53 ▶}
        "db" => DatabaseManager {#37 ▶}
        "view.engine.resolver" => EngineResolver {#105 ▶}
        "files" => Filesystem {#111}
        "view" => Factory {#112 ▶}
        "translation.loader" => FileLoader {#119 ▶}
        "translator" => Translator {#120 ▶}
        "routes" => RouteCollection {#29 ▶}
        "url" => UrlGenerator {#128 ▶}
      ]
      #aliases: array:66 [▶]
      #abstractAliases: array:36 [▶]
      #extenders: []
      #tags: []
      #buildStack: []
      #with: []
      +contextual: array:1 [▶]
      #reboundCallbacks: array:2 [▶]
      #globalResolvingCallbacks: []
      #globalAfterResolvingCallbacks: []
      #resolvingCallbacks: array:1 [▶]
      #afterResolvingCallbacks: array:1 [▶]
    }

            可以看到在处理请求之前,服务容器中的instances共享实例属性,就已经注册了十几个对象,而在处理请求的过程中又还要注册很多对象,这也就不难理解为什么laravel框架的并发性较差了。

    更多相关内容
  • 摘要 腾兴网为您分享:搭建php Laravel框架教程详解,长江e号,云集,猿辅导,易码平台等软件知识,以及cctv5手机,顺网无线wifi,万能注册机,cc语音,搅沫沫社区,拼多多采集器,氢os,青橙健身,全民学画画,微信...

    摘要 腾兴网为您分享:搭建php Laravel框架教程详解,长江e号,云集,猿辅导,易码平台等软件知识,以及cctv5手机,顺网无线wifi,万能注册机,cc语音,搅沫沫社区,拼多多采集器,氢os,青橙健身,全民学画画,微信电话本app,dx修复,魏书生六步教学法,下里巴人,人体医学解剖图,11平台全图等软件it资讯,欢迎关注腾兴网。一、安装 Composer Laravel 框架使用 Composer(PHP包管理工具,参考 Composer 中文文档)来管理代码依赖性。 首先,你需要下载 Composer 的 PHAR 打包文件( composer.phar ),下载完成后把它放在项...

    一、安装 Composer

    Laravel 框架使用 Composer(PHP包管理工具,参考 Composer 中文文档)来管理代码依赖性。 首先,你需要下载 Composer 的 PHAR 打包文件( composer.phar ),下载完成后把它放在项目目录下或者放到 usr/local/bin 目录下以便在系统中全局调用。在Windows操作系统中,你可以使用 Composer 的Windows安装工具。

    二、安装 Laravel

    方法一:通过 Laravel 安装器安装

    首先,通过 Composer 下载 Laravel 安装器。

    composer global require "laravel/installer=~1.1"

    请确保把 ~/.composer/vendor/bin 路径添加到 PATH 环境变量里, 这样laravel 可执行文件才能被命令行找到, 以后您就可以在命令行下直接使用 laravel 命令.

    安装成功后, 可以使用命令 laravel new 在您指定的目录下创建一份全新安装的 Laravel。例如,laravel new blog 将会在当前目录下创建一个叫 blog 的目录, 此目录里面存放着全新安装的 Laravel 以及其依赖的工具包。这种安装方法比通过 Composer 安装要快许多。

    方法二:通过 Composer 的 create-project 命令安装 Laravel

    还可以通过在命令行执行 Composer 的 create-project 命令来安装Laravel:

    composer create-project laravel/laravel --prefer-dist

    方法三:通过下载 Laravel 包安装

    Composer 安装完成后,下载最新版Laravel框架,把它解压缩到你服务器上的一个目录中。然后在 Laravel 应用的根目录下运行命令行命令 php composer.phar install (或者 composer install )来安装所有的框架依赖包。在此过程中,为了成功完成安装,你需要在服务器上安装好 Git。

    当 Laravel 框架安装好后,你可以使用命令行命令 php composer.phar update 来更新框架。

    三、对服务器环境的要求

    Laravel 框架对系统环境有如下要求:

    PHP >= 5.4

    MCrypt PHP 扩展

    从 PHP 5.5 版本开始,针对某些操作系统的安装包需要你自己手工安装 PHP 的 JSON 扩展模块。如果你使用的是 Ubuntu,可以通过, apt-get install php5-json 命令直接安装。

    四、展示

    bde463a8d4aa17e89aed0d07ed291b87.png

    必要插件安装及配置

    我们使用著名的Sentry插件来构建登录等权限验证系统。

    打开 ./composer.json ,变更为:

    "require": {

    "laravel/framework": "4.2.*",

    "cartalyst/sentry": "2.1.4"

    },

    然后,在项目根目录下运行命令

    composer update

    然后稍等一会儿,它会提示 cartalyst/sentry 2.1.4安装完成。

    同理,我们将安装一个开发用的非常强大的插件,way/generators,这是它在composer库中的名字。在 composer.json中增加:

    "require-dev": {

    "way/generators": "~2.0"

    },和“require”同级,放在下面,不是里面哦~。

    运行 composer update,之后在 ./app/config/app.php 中 恰当的位置 增加配置:

    'Way\Generators\GeneratorsServiceProvider'安装完成过,在命令行中运行 php artisan,就可以看到这个插件带来的许多新的功能。

    有人会问,为什么用了国内镜像还是如此之慢?其实composer在update的时候最慢的地方并不是下载,而是下载之前的依赖关系解析,由于Laravel依赖的composer包非常之多,PHP脚本的执行速度又比较慢,所以每次update等个两三分钟很正常,习惯就好。

    3. 数据库建立及迁移

    数据库配置文件位于 ./app/config/database.php,我们需要把“connections”中的“mysql”项改成我们需要的配置。下面是我的配置:

    'mysql' => array(

    'driver'    => 'mysql',

    'host'      => 'localhost',

    'database'  => 'laravel',

    'username'  => 'root',

    'passWord'  => 'password',

    'charset'   => 'utf8',

    'collation' => 'utf8_unicode_ci',

    'prefix'    => 'l4_',

    ),

    prefix为表前缀,这个Laravel会帮我们自动维护,大胆写上不用担心。

    这时候你需要去数据库建立此数据库,然后在命令行中输入:

    php artisan migrate --package=cartalyst/sentry

    执行完成后,你的数据库里就有了5张表,这是sentry自己建立的。sentry在Laravel4下的配置详情见 https://cartalyst.com/manual/sentry#laravel-4,我大致说一下:

    在 ./app/config/app.php 中 相应的位置 分别增加以下两行:

    'Cartalyst\Sentry\SentryServiceProvider','Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',权限系统的数据库配置到此为止。

    我们的简单blog系统将会有两种元素,Article和Page,下面我们将创建articles和pages数据表,命令行运行:

    php artisan migrate:make create_articles_table --create=articles

    php artisan migrate:make create_pages_table --create=pages

    这时候,去到 ./app/database/migrations,将会看到多出了两个文件,这就是数据库迁移文件,过一会我们将操作artisan将这两个文件描述的两张表变成数据库中真实的两张表,放心,一切都是自动的。

    下面,在***_create_articles_table.php中修改:

    Schema::create('articles', function(Blueprint $table)

    {

    $table->increments('id');

    $table->string('title');

    $table->string('slug')->nullable();

    $table->text('body')->nullable();

    $table->string('image')->nullable();

    $table->integer('user_id');

    $table->timestamps();

    });

    在***_create_pages_table.php中修改:

    Schema::create('pages', function(Blueprint $table)

    {

    $table->increments('id');

    $table->string('title');

    $table->string('slug')->nullable();

    $table->text('body')->nullable();

    $table->integer('user_id');

    $table->timestamps();

    });

    下面,就是见证奇迹的时刻,在命令行中运行:

    php artisan migrate

    这时候数据库中的articles表和pages表就建立完成了。

    4. 模型 Models

    接下来我们将接触Laravel最为强大的部分,Eloquent ORM,真正提高生产力的地方,借用库克的话说一句,鹅妹子英!

    我们在命令行运行下列语句以创建两个model:

    php artisan generate:model article

    php artisan generate:model page这时候,在 app/models/ 下就出现了两个文件 Article.php 和 Page.php,这是两个 Model 类,他们都继承了Laravel提供的核心类 \Eloquent。这里需要强调一下,用命令行的方式创建文件,和自己手动创建文件没有任何区别,你也可以尝试自己创建这两个 Model 类哦。

    Model 即为 MVC 中的 M,翻译为 模型,负责跟数据库交互。在 Eloquent 中,数据库中每一张表对应着一个 Model 类。

    如果你从其他框架转过来,可能对这里一笔带过的 Model 部分很不适应,没办法,是因为 Eloquent 实在太强大了啦,真的没什么好做的,继承一下 Eloquent 类就能实现很多很多功能了。详见 Eloquent 系列教程:深入理解 Laravel Eloquent(一)——基本概念及用法

    5. 数据库填充

    分别运行下列命令:

    php artisan generate:seed page

    php artisan generate:seed article这时,在 ./app/database/seeds/ 下就出现了两个新的文件,这就是我们的数据库填充文件。Laravel提供自动数据库填充,十分方便。

    generator默认使用Faker\Factory作为随机数据生成器,所以我们需要安装这个composer包,地址是 https://packagist.org/packages/fzaninotto/faker ,跟generator一起安装在 require-dev 中即可。具体安装请自行完成,可以参考Sentry和Generator,这是第一次练习。

    接下来,分别更改这两个文件:

    Article::create([

    'title'   => $faker->sentence($nbWords = 6),

    'slug'    => 'first-post',

    'body'    => $faker->paragraph($nbSentences = 5),

    'user_id' => 1,

    ]);Page::create([

    'title'   => $faker->sentence($nbWords = 6),

    'slug'    => 'first-page',

    'body'    => $faker->paragraph($nbSentences = 5),

    'user_id' => 1,

    ]);

    然后,我们需要在 DatabaseSeeder.php 中增加两行,让Laravel在seed的时候会带上我们新增的这两个seed文件。

    $this->call('ArticleTableSeeder');

    $this->call('PageTableSeeder');

    下面就要真正的把数据填充进数据库了:

    php artisan db:seed操作完成以后去数据库看看,数据已经填充进去了,article和page各10行。

    相关推荐

    展开全文
  • PHP-laravel框架一1

    千次阅读 2022-01-13 14:20:20
    2、开发环境配置与要求 Laravel框架的运行环境是有严格要求的。 php.ini配置文件需要开启的扩展: extension=...

    一、Laravel简介

    1、简介

    Laravel是一套简洁、优雅的PHP WEB开发框架(PHP Web Framework),具有富于表达性且简洁的语法,Laravel是易于理解且强大的,它提供了强大的工具用以开发大型,健壮的应用,例如具有自动验证、路由、Session、缓存、数据库迁移工具、单元测试等常用的工具和功能

    官网:https://laravel.com/
    中文官网:http://www.golaravel.com/
    中文社区:https://laravel-china.org/
    Laravel框架的广告语:
    为 WEB 艺术家创造的 PHP 框架

    目前大部分的框架公共的特点(了解):
    (1)单入口,所有的请求必须从单入口开始,主要是便于管理(统一的参数过滤)
    (2)MVC的思想(分层思想,主要是为了协同开发,实现后期的维护方便)
    (3)ORM操作数据库(Object Relations Model,关联模型):AR模式
    注意:Laravel框架有一个特点,所有的URL访问都必须事先定好路由规则。

    2、开发环境配置与要求

    Laravel框架的运行对环境是有严格要求的。
    在这里插入图片描述
    php.ini配置文件需要开启的扩展:
    extension=php_openssl.dll
    extension=php_pdo_mysql.dll
    extension=php_mbstring.dll
    extension=php_fileinfo.dll(验证码代码依赖需要该扩展)
    extension=php_curl.dll(主要用于请求的发送)

    在这里插入图片描述
    httpd.conf配置文件需要开启的模块:
    LoadModule deflate_module modules/mod_deflate.so
    LoadModule rewrite_module modules/mod_rewrite.so

    如果php的版本不满足基本要求需要升级,则有2个方法可供使用:
    a. 使用带有符合要求的php版本的集成环境替换当前环境(phpstudy),如当前数据库的数据仍需要,则需要备份下数据库,在装好新的环境之后导入备份的数据库;
    b. apache、mysql不做任何替换操作,单独的下载符合要求的版本php,替换原先低版本的php;
    c. 建议php使用php7+版本

    3、PHP的注意事项(重要)

    ①在php安装好之后需要将php.exe的位置的目录添加到环境变量中去(如果之前有加过别的版本的php环境变量则需要删除掉);
    ②得确保在添加环境变量之后,通过命令“php -v”运行得到的结果中php版本号与实际运行的版本号一致;

    将PHP加入环境变量(目录):
    命令行PHP版本检测运行结果(如果使用集成环境,则要求命令行显示php版本要与集成环境的版本一致):
    在这里插入图片描述

    4、composer介绍

    (1)什么是composer

    composer英文单词意思:音乐指挥者
    composer是PHP中用来管理依赖(dependency)关系的工具,你可以在自己的项目中声明所依赖的外部工具库(libraries),composer会帮您安装这些依赖的库文件。
    一句话,composer是一个工具,是为php项目准备的软件管家。
    工作原理:
    在这里插入图片描述
    如上图,composer可以去packagist应用市场 里边下载软件,但是该市场只给返回软件的地址,对应的软件都是在github里边存储的,最终下载的软件是从github返回的。
    https://packagist.org

    官方网站:https://getcomposer.org
    下载地址:https://getcomposer.org/download/
    在这里插入图片描述

    (2)composer安装使用

    注意前提条件:
    开启PHP中openssl扩展。
    安装composer需要明确php.exe的文件路径。
    安装 composer需要联网

    ①运行composer安装程序
    在这里插入图片描述

    ②直接下一步
    在这里插入图片描述
    ③选择需要使用的php所在路径(如果显示不正确,可以点击浏览自行选择)
    在这里插入图片描述
    ④代理设置(默认不设置代理)
    在这里插入图片描述
    ⑤直接下一步
    在这里插入图片描述
    ⑥继续下一步
    在这里插入图片描述
    ⑦完成安装
    在这里插入图片描述
    安装完成后,进入到命令提示符(cmd),运行“composer”,如果出现如下提示,则安装完成。
    在这里插入图片描述
    在这里插入图片描述

    (3)使用composer方式部署laravel项目

    第一步:切换镜像(软件下载地址)为国内镜像【建议】
    镜像官网:
    https://developer.aliyun.com/composer

    通过composer可以去packagist.org市场 和 github代码库 下载功能代码
    但是packagist和github对应的服务器都部署在国外。
    这时“镜像”应运而生,其是把存储在packagist和github等外国服务器上的全部内容定期(更新比较及时,几分钟的延迟)同步到国内服务器里边,使得广大开发者可以不用绕远到外国,相反在自己国家就可以把软件更新到自己的项目中,方便了composer的使用。
    在这里插入图片描述
    给composer配置镜像:
    修改 composer 的全局配置文件(推荐方式)
    #composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    在这里插入图片描述
    第二步:composer部署laravel项目【重点】。
    #composer create-project laravel/laravel --prefer-dist ./
    命令含义:
    composer:表示需要执行composer
    create-project:表示需要通过composer创建一个项目
    laravel/laravel:创建一个Laravel项目
    –prefer-dist:表示强制使用压缩包方式下载(省时间)
    ./或者其他名称:表示项目需要创建的路径【在创建项目的时候一定要确保路径目录为空】
    例如:需要创建一个Laravel项目
    在这里插入图片描述
    在这里插入图片描述
    上述命令默认安装的是当前镜像网站中最新的版本:5.5.28。

    比如创建一个名为shop的laravel项目
    #composer create-project laravel/laravel --prefer-dist shop
    运行composer的时候需要注意,在什么地方运行(命令行的当前工作路径)composer则就会在什么地方创建项目。

    注意,如果要下载其他版本,比如5.4版本中最新版本号(用表示),可以使用这个命令
    #composer create-project laravel/laravel=5.4.
    --prefer-dist ./
    在这里插入图片描述
    #composer create-project laravel/laravel=5.5.28 --prefer-dist ./ 指定版本

    5、目录结构分析

    在这里插入图片描述
    (1)app目录:项目的核心目录,主要用于存放核心代码,也包括控制器、模型、中间件。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (2)bootstrap目录,laravel启动目录
    (3)config目录,项目的配置目录,主要存放配置文件,比如数据库的配置
    app.php:全局配置文件,在后期开发的时候需要频繁的使用这个配置文件;
    auth.php:用户登录时候需要用到的用户认证模块的配置文件;
    database.php:数据库的配置文件;
    filesystems.php:文件系统(如文件存储等)的配置文件;
    (4)database目录,数据迁移目录
    factories:存放一些工厂模式需要用的一些文件;
    migrations:迁移,存放的是迁移文件(创建/删除/修改数据表操作的类文件);
    seeds:播种、种子,存放的是种子(填充器)文件(模拟向数据表中写入数据的操作类
    (5)public目录,项目的入口文件和系统的静态资源目录(css,img,js,uploads)
    后期使用的外部静态文件(js、css、图片等)都需要放到Public目录下
    并且后期的网站的根目录也是这个目录(apache的documentroot目录为该目录路径)

    (6)resources目录,存放视图文件,还有就是语言包文件的目录
    language:存储语言包的目录;
    views:视图文件存储目录;

    (7)routes目录,是定义路由的目录,web.php是定义路由的文件
    (8)storage目录,主要是存放缓存文件和日志文件,注意,如果在linux环境下,该目录需要有可写权限。(后期用户上传文件如果存在本地则也在storage下)

    app:保存用户上传文件的路径;
    framework:框架自带的文件存储目录;
    logs:框架的日志文件存储位置;
    (9)vendor目录,主要是存放第三方的类库文件,laravel思想主要是共同的开发,不要重复的造轮子(例如,里面可能存在验证码类,上传类,邮件类),该目录还存放laravel框架的源码。注意如果要使用composer软件管理的,composer下载的类库都是存放在该目录下面的。
    (10).env文件:主要是设置一些系统相关的环境配置文件信息。config目录里面的文件配置内容一般都是读取该文件里面的配置信息(config里面的配置项的值基本都是来自.env文件)。

    (11)artisan脚手架文件,主要用于生成的代码的(自动生成),比如生成控制器,模型文件等。

    执行命令:#php artisan 需要执行的指令
    要求1:php必须添加环境变量,并且保证版本;
    要求2:artisan必须存在命令行当前的工作路径下;

    (12)composer.json依赖包配置文件
    声明当前需要的软件依赖,但是不能删除,composer需要使用。

    需要重点掌握的目录(频繁使用)

    目录作用
    app保存模型文件(默认)
    app/Http/Controllersapp/Http/Controllers
    resources/views保存视图文件
    config配置文件目录
    routes存放路由文件
    database/migrations存放数据库迁移文件(操作数据表结构)
    database/seeds存放数据库种子文件(模拟测试数据)

    6、启动方式

    方式一:Laravel框架提供了更简单的方式启动项目(相比配置apache)
    执行命令:#php artisan serve

    在这里插入图片描述
    不推荐使用:
    ①能够跑php代码,但是不启动数据库。
    ②该方式启动后,如果修改了项目的配置.env的话,则需要重新启动才会生效。
    ③如果使用命令行方式进行启动,则如果想继续访问页面,需要命令行不能关闭。
    方式二:使用 wamp或lamp环境(常见)
    虚拟主机配置:(虚拟主机 ≠ 虚拟机)

    在这里插入图片描述
    通过浏览器测试访问:
    http://i-lynn.cn/
    在这里插入图片描述

    二、Laravel入门使用(路由)

    什么是路由:将用户的请求按照事先规划的方案提交给指定的控制器或者功能函数来进行处理.【通俗的讲,路由就是访问地址形式】
    在博客中,当我们在URL地址中,传递p(平台)、c(控制器)、a(方法)三个参数时,系统会自动跳转到指定模型中指定控制器的指定方法,这些处理过程都是由框架自动完成的。但是,在Laravel框架中,其并没有指定固定参数,其路由必须要手工进行配置。

    1、路由配置文件位置

    路由文件在routes/web.php。
    在这里插入图片描述
    后续我们自己定义的路由都需要在该文件中去声明。

    2、routes\web.php配置文件中配置路由(重点)

    (1)默认根路由
    问题:为什么当我们在浏览器中访问虚拟域名http://域名时,如何显示Laravel5?
    答:原因是在路由文件web.php中,其已经定义好了一个路由,这个路由称之为“根路由”,一般用于访问网站的首页。
    在这里插入图片描述

    (2)路由定义格式:
    Route::请求方式(‘请求的URL’, 匿名函数或控制器响应的方法)
    比如请求域名下根目录
    Route::get(’/’,function(){return ‘hello world’;});
    函数的返回值,就是请求的响应。
    在这里插入图片描述
    页面上的显示:
    在这里插入图片描述
    又比如请求:http://域名/home地址则路由写成:
    Route::get(’/home’,function(){return ‘您当前访问的是/home地址’;});
    显示:
    在这里插入图片描述
    在这里插入图片描述
    注意:路由地址中的第一个“/”可以不写(包括“根路由”)。

    如果还有更多的路由需要去定义,则仿照上述的形式语法继续编写即可。但是只要需要访问,则必须需要定义路由。
    如果路由错误或者没有定义则会看到以下错误页面(以Laravel5.4.30为准)
    在这里插入图片描述
    如果是5.5以后的版本,则提示如下:
    在这里插入图片描述
    (3)请求方式有哪些?
    在这里插入图片描述
    如果要解决“”这样的问题,则需要下面的两个方法解决:
    在这里插入图片描述
    常见的四个方法:
    get方法:表示匹配请求类型为get的请求;
    post方法:表示匹配请求类型为post的请求;
    macth方法:表示匹配用户指定的几个请求类型(通过第一个参数去指定)的请求;
    语法:Route::match([‘get’,’post’,’…’], u r l , url, urlcalback);
    any方法:表示匹配路由所支持的全部请求类型;

    如果路由方法与实际的请求类型不一致,则会报错
    在这里插入图片描述
    在5.5及以后的版本中报错如下:
    在这里插入图片描述

    3、路由参数

    使用路由需要public目录下.htaccess文件设置apache重写路由

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews -Indexes
        </IfModule>
    
        RewriteEngine On
    
        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} (.+)/$
        RewriteRule ^ %1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    
    

    路由参数其实就是给路由传递参数。
    参数分为必选参数和可选参数。

    必选参数:一旦在路由中定义了,则必须传递,不传递就会报错。
    例如:
    Route::get(‘home1/{id}’,function($id){
    echo ‘输入的id是’ . $id;
    });

    路由参数的传递通过路由地址中的“{参数名}”的形式来进行传递,该形式是必选参数的形式,可以选的则使用“{参数名?}”。
    在这里插入图片描述
    如果设定了可选路由参数,但是又没有给默认值同时也没传递,则报错:
    在这里插入图片描述
    扩展:
    路由参数除了上述的2种传递方式之后,还支持传统的路由参数传递:
    url?id=xxx&aaa=xxxx
    这种方式传递参数不受路由的限制的,不需要在路由文件中事先定义好路由参数,例如:
    在这里插入图片描述
    在这里插入图片描述

    4、路由别名(alias)【重点】4、路由别名(alias)【重点】

    路由别名相当于在路由定义的时候,为路由起了一个别名,在以后的程序中可以通过这个别名来获取路由的信息。/absafvdsadssdbfdsfa/qwdasd1312213fberfdvf/ascdfadvs => url1
    后期在视图中会频繁使用到这样的代码“xxxx
    场景:在后期需要频繁的定义跳转地址,但是如果这些地址写死了的话,万一发生变化,得全部修改,这个操作比较麻烦,因此可以使用路由别名的机制(定义路由的时候给路由起名字,在后期需要使用路由的时候直接调用名字)去简化以后的操作。

    给路由起名字的语法:
    Route::请求类型(路由地址,响应方法) -> name(别名);

    例如:给hello的路由起名字“h1”
    在这里插入图片描述
    调用该路由则可以写成:route(‘名字’);例如像刚才的h1,则需要写成route(‘h1’)

    扩展补充:查看系统已经有的路由命令:#php artisan route:list
    在这里插入图片描述

    5、路由群组(理解)【实用】

    有后台有如下路由
    /admin/login
    /admin/logout
    /admin/index
    /admin/user/add
    /admin/user/del

    他们的共同点(这个共同点不局限于只是前缀)是,都有/admin/前缀,为了管理方便,可以把他们放到一个路由分组中,这个分组称之为路由群组。

    使用prefix属性指定路由前缀,也就是其路由中都具备的相同部分。

    语法:Route::group(公共属性数组,回调函数); 回调函数中放的剔除公共属性之后的路由

    比如,想要为所有路由URLs前面添加前缀admin

    Route::group(['prefix' => 'admin], function () {
        Route::get(login, function ()    {
            // 匹配 "/admin/login" URL
    	});
    	Route::get(logout, function ()    {
            // 匹配 "/admin/logout" URL
    	});
    	Route::get(user/add, function ()    {
            // 匹配 "/admin/user/add" URL
    	});
    });
    

    记住:以大局为重。

    案例:编写路由/home/test/test1和/home/test/test2,要求使用路由群组
    公共点:/home/test

    Route::group([‘prefix’ => ‘home/test’],function(){
    	Route::get(‘test1’,function(){
    
    	});
    	Route::get(‘test2’,1function(){
    
    	});
    });
    

    在这里插入图片描述
    注意:使用路由群组不会改变其原有在地址栏中输入的地址。变的只是路由定义的写法。

    在后期还会接触到middleware(中间件)属性。

    三、控制器使用©

    控制器主要的作用主要负责接收用户输入请求,调度模型处理数据最后利用视图展示数据。

    1、控制器文件写在哪里?

    其位置位于app/Http/Controllers
    在这里插入图片描述

    其中Auth存放的是框架自带的Auth认证相关的示例控制器文件,controller.php文件是框架的基类控制器。

    2、控制器文件如何命名?

    命名可以参考Auth文件夹中给定的示例文件:
    在这里插入图片描述
    文件的命名方式:大驼峰+Controller.php

    友情提示:在写的时候不要带“+”。

    3、结构代码如何书写?【重点】

    注意:其控制器基础结构代码,不需要自己去手动编写,可以通过artisan命令行来自动生成。
    因此需要记住对应的命令:

    #php artisan make:controller 控制器名(大驼峰)Controller
    

    不要写“.php”。

    例如:使用artisan命令创建TestController.php文件。先确定命令:
    #php artisan make:controller TestController
    在这里插入图片描述
    其中已经写好的结构代码:
    在这里插入图片描述
    后续如果需要更多的控制器只需要重复的执行上述的artisan命令即可。

    注意:控制器可以分目录管理。

    4、控制器路由(项目以该方式为主)

    即,如何使用路由规则调用控制器下的方法,而不再走回调函数。
    路由设置格式基本相同,只是将匿名函数换成‘控制器类名@方法名’
    定义格式如下:
    Route::请求方法(‘路由表达式’,’控制器@方法’);
    例如:在Test控制器中创建test1方法,其中输出phpinfo信息
    在这里插入图片描述
    编写路由规则:
    设定路由: /test1
    在这里插入图片描述
    效果如下:
    在这里插入图片描述

    5、接收用户输入【重点】

    接收用户输入的类:Illuminate\Support\Facades\Input
    Facades:"门面"的思想。门面是介于一个类的实例化与没有实例化中间的一个状态。其实是类的一个接口实现。在这个状态下可以不实例化类但是可以调用类中的方法。说白了就是静态方法的调用。

    Input:get('参数的名字','如果参数没有被传递使用该默认值'); //类似php里三元运算符
    Input::all();获取所有的用户输入
    Input::get('参数的名字');获取单个的用户的输入
    Input::only(['id','age']);获取指定几个用户的输入
    Input::except(['id','age']);获取指定几个用户的输入以外的所有的参数
    Input::has('name');判断某个输入的参数是否存在
    

    上述方法既可以获取get中的信息,也可以获取post中的信息

    在laravel中如果需要使用facdes的话,但是又不想写那么长的引入操作:
    Use Illuminate\Support\Facades\Input
    则可以在config/app.php中定义长串的别名(在aliases数组中定义别名)
    在这里插入图片描述
    案例:在/test2路由下测试上述的方法
    在这里插入图片描述
    定义路由:
    /test2
    在这里插入图片描述
    编写test2方法测试上述的获取信息的操作:
    给test2路由传递一系列的参数(get传值)
    在这里插入图片描述

    在Laravel中友好输出函数:dd(需要打印的内容);
    dd=dump + die
    dd函数之后的内容将不会继续执行;

    在Laravel中除了Input类可以获取用户的输入,Request也可以获取用户输入。

    四、DB类操作数据库(重点)

    按照MVC的架构,对应的操作应该放在Model中完成,但如果不使用Model,我们也可以用laravel框架提供的DB类操作数据库。而且,对于某些极其复杂的sql,用Model已经很难完成,需要开发者自己手写sql语句,使用DB类去执行原生sql。laravel 中DB类的基本用法 DB::table(‘tableName’)获取操作tableName表的实例(对象)。

    1、数据表的创建与配置

    建立数据库:
    建立数据库的方式:
    ①sql语句
    ②图形界面 phpMyAdmin Navicat

    在这里插入图片描述
    在这里插入图片描述
    (1)创建数据库和测试表

    
    create table member(
        id int primary key auto_increment,
        name varchar(32) not null,
        age tinyint unsigned not null,
    email varchar(32) not null
    )engine myisam charset utf8mb4;
    
    

    在这里插入图片描述
    (2)数据库在laravel框架中的配置
    在.env文件里面,
    在这里插入图片描述
    也可以在config目录下面的database.php文件里面配置。使用env函数,表示先从env环境里面读取,如果获取成功则使用,如果获取失败,则使用env函数的第二个参数。
    注意:如果是php artisan serve 方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件:如果是wamp/lamp等环境则不需要重启。

    (3)在Test控制器中引入DB门面;

    在这里插入图片描述
    (4)定义增删改查需要的路由;
    增加: /add get
    删除: /del get
    修改: /mod get
    查询: /select get
    在这里插入图片描述

    2、增加信息(insert)

    对数据库中的某个表增加数据主要有两个函数可以实现,分别是insert()和insertGetId()

    insert(数组)可以同时添加一条或多条,返回值是布尔类型
    insertGetId(一维数组),只能添加一条数据,返回自增的id

    语法:DB::table(‘表名’) -> insert(); 连贯操作/链式操作
    在这里插入图片描述

    3、修改数据( update)

    数据修改可以使用update()、inscrement()和decrement()方法来实现。
    ①Update方法表示可以修改整个记录中的全部字段;
    ②Increment和decrement表示修改数字字段的数值(递增或者递减),典型应用:记录登录次数、积分的增加。
    案例:把id=1的名称,改名为 ‘张三丰’
    -> where() -> update([])
    注意:where方法之后可以继续调用where之类的方法。
    -> where() -> where() ->where() … 这个语法是并且 (and) 关系语法。

    -> where() -> orWhere() -> orWhere()… 这个语法是或者 (or) 关系语法。

    Orwhere方法的参数与 where一致。
    Where参数顺序:
    -> where(字段名,运算符,字段值)。例如id=1,则可以写成:where(‘id’,’=’,1),简写成Where(‘id’,1); 【只有=可以简写】
    在这里插入图片描述
    返回值,表示受到影响的行数
    在这里插入图片描述
    案例:把id=1的用户年龄字段值加10;【了解】
    DB::table(’ member’)->increment(‘age’); 每次+1
    DB::table(’ member’)->increment(‘age’, 5); 每次+5
    DB::table(’ member’)->decrement(‘age’); 每次-1
    DB::table(’ member’)->decrement(‘age’, 5); 每次-5
    在这里插入图片描述

    4、查询数据(get)

    (1)取出基本数据

    案例1:获取member表中所有的数据
    DB::table(‘member’)->get(); //相当于select * from member;
    返回值是一个集合对象,

    返回值:

    完成遍历取出的数据:
    在这里插入图片描述
    注意:Get查询的结果每一行的记录是对象的形式,不是数组。

    由于每一条记录都是一个对象,因此在循环或者访问字段的值的时候需要使用对象调用属性的方式进行访问,不能再用数组形式进行访问。否则就会报以下错误:
    在这里插入图片描述

    案例2:获取id<3的数据
    ->where()->get();

    在这里插入图片描述
    在这里插入图片描述

    (2)取出单行数据

    DB::table(‘member’)->where(‘id’,‘1’)->first();//返回值是一个对象
    等价于limit 1

    在这里插入图片描述
    在这里插入图片描述

    (3)获取某个具体的值(一个字段)

    DB::table(‘member’)->where(‘id’,‘1’)->value(‘name’);
    在这里插入图片描述
    在这里插入图片描述

    (4)获取某些字段数据(多个字段)

    $users = DB::table(‘member’)->select(‘name’, ‘email’)->get();
    $users = DB::table(‘member’)->select(‘name as user_name’)->get();
    $db -> select(DB::raw(‘name,age’)) -> get(); // 不解析字段,原样使用
    在这里插入图片描述
    在这里插入图片描述
    注意:有多少个字段就有多少个参数(select方法),除了DB::raw之外。

    (5)排序操作

    DB::table(‘member’)->orderBy(‘age’,‘desc’)->get(); desc降序 asc 升序 默认升序
    在这里插入图片描述
    在这里插入图片描述

    (6)分页操作

    DB::table(‘member’)->limit(3)->offset(2)->get();
    Limit:表示限制输出的条数(分页中每页显示记录数)
    Offset:从什么地方开始
    组合起来等价于limit 2,3 limit 3(offset),2(length)
    在这里插入图片描述
    归纳:具体的查询等操作方法一般都是放在连贯操作的最后。辅助方法可以放在中间,并且其先后顺序是无所谓的。
    在这里插入图片描述

    5、删除数据(delete)【了解】

    在删除中,有两种方式:物理删除(本质就是删除)、逻辑删除(本质是修改)

    数据删除可以通过delete函数和truncate函数实现,
    delete表示删除记录;
    truncate表示清空整个数据表;
    DB::table(‘table_name’)->where(‘id’,‘1’)->delete();

    例如:删除id小于3的记录

    在这里插入图片描述
    返回值表示删除的行数:
    在这里插入图片描述
    【补充:truncate】
    语法:DB::table(‘member’) -> truncate();

    6、执行任意的SQL语句(补充了解)

    (1)执行原生查询语句
    DB::select(“select语句”);

    (2)执行原生插入语句
    DB::insert(“insert语句”);

    (3)执行原生修改语句
    DB::update(“update语句”);

    (4)执行原生删除语句
    DB::delete(“delete语句”);

    (5)执行一个通用语句(没有返回值的语句,例如:create table等)
    DB::statement(“语句”);

    五、视图操作【重点】

    1、视图写哪里?

    在这里插入图片描述
    注意:
    a. 视图可以分目录管理
    b. 视图的后缀在laravel中一般一般都是“.blade.php”
    c. 视图的创建无法通过artisan来实现

    2、视图文件的命名与渲染

    (1)文件名习惯小写(建议小写)
    (2)文件名的后缀是 .blade.php(因为laravel里面有一套模板引擎就是使用blade,可以直接使用标签语法{{ $title }}, 也可以使用原生的php语法显示数据。)
    (3)需要注意的是也可以使用.php结尾,但是这样的话就不能使用laravel提供的标签{{ $title }}语法显示数据,只能使用原生语法 <?php echo $title;?> 显示数据
    两个视图文件同时存在,则.blade.php后缀的优先显示。

    案例:编写一路由地址,调用Test控制器的test3方法,展示视图test3文件(创建2个,一个以.blade.php结尾,另外一个.php结尾)【验证优先级】
    创建对应路由:
    /test3
    在这里插入图片描述

    编写控制器方法:
    展示视图的方法:
    return view(‘视图文件的名称’);

    视图可以进行分目录管理的,例如需要展示home/test/test2视图,则可以写成:
    return view(‘home/test/test2’) 当然也支持点写法:view(‘home.test.test2’)
    展示方法:
    在这里插入图片描述
    没有视图文件报错:
    在这里插入图片描述
    新建2个视图(一个以“.blade.php”结尾,一个是“.php”结尾)最终展示的是.blade.php文件
    在这里插入图片描述

    3、变量分配与展示

    语法:
    ①view(模板文件名称,数组) 数组就是需要分配的变量集合,数组是一个键值数组,其键与变量名尽量一致
    ②view(模板文件名称)->with(数组)
    ③view(模板文件名称)->with(名称,值)->with(名称,值)…
    使用view()方式渲染一个视图后,在.blade.php的视图文件中,模板中输出变量使用“{{ $变量名 }} ”(变量名就是分配过来数组的键)

    案例:需要将控制器方法中的时间(年月日时分秒)数据传递到视图中去,并且输出
    创建test3方法

    在这里插入图片描述
    创建模版页面:
    在这里插入图片描述
    输出效果:
    在这里插入图片描述
    提示:变量在视图中展示的时候,在原先PHP文件中怎么写,在视图中依旧按照原先的方式进行编写,只需要写好之后在最外层套2个“{ }”即可。例如对于时间戳的格式化:
    在这里插入图片描述

    4、扩展:compact函数使用(传参)

    Compact函数,是php内置函数跟laravel框架没有关系。作用主要是用于打包数组的。
    语法:compact(‘变量名1’,’变量名2’,…);
    在这里插入图片描述
    因此刚才3中的案例还可以写成:
    在这里插入图片描述
    只是影响的是后台的数组打包,跟前台使用没有什么关系。

    5、循环与分支语法标签【重点】

    //在视图里面遍历数据【重点】
    在这里插入图片描述
    案例:使用循环标签的语法,在视图中输出数据
    新建路由:
    /test4
    在这里插入图片描述
    创建需要的test4方法
    在这里插入图片描述
    创建视图,视图中的循环输出:
    在这里插入图片描述
    显示效果:
    在这里插入图片描述
    需要注意的是,如果本身data是结果集的话,则循环到的value一般会是一个对象(此时不能使用“[]”访问数组的形式进行属性访问,而应该使用“->”形式)。

    //在视图里面可以执行if判断【重点】

    在这里插入图片描述
    案例:要求在php代码中(控制器的方法)动态输出今天的星期数字(1-7),将数字传递给视图,显示出今天是星期几,如假设传递的数字是7,则页面中要输出“星期天”【将数字转化成汉字】
    a. 先在控制器方法中输出当前的星期数字
    在这里插入图片描述
    在这里插入图片描述
    b. 需要在视图中获取数字,并且通过if判断输出今天的星期汉字
    在这里插入图片描述
    效果:
    在这里插入图片描述

    6、模版继承/包含【理解】

    在这里插入图片描述
    继承不仅仅在php类中存在,在视图中同样存在。一般是用于做有公共部分的页面。
    以上图为例,可以将头和尾单独的放到一个页面中去(父页面),可变的区域称之为叫子页面,如果子页面需要用到父页面的东西,则需要使用继承。

    问题:PHP父类中的方法能不能在子类中重写?

    案例:编写父级页面(父类),再编写一个子页面(子类)(相当于php中的两个类)
    编写父级页面:

    语法:@yield(‘名字’) 在父级页面中的占位,也就是空出可变区域

    在这里插入图片描述
    在父页面中,头尾是固定的,中间是可变的区域,由于内容不知道是什么,所以通过yield占位,等待子页面去补充(等待子页面重写yield区域)。

    再去创建子页面和其路由
    /test5
    在这里插入图片描述
    创建test5方法,展示视图
    在这里插入图片描述

    创建视图test5(只是展示可变区域)
    在这里插入图片描述
    继承语法:
    子模版中按以下语法书写:
    @extends(‘需要继承的模版文件名’) 其名称要是完整的路径,类似view视图路径
    通过section标签绑定区块/部件到父级页面,区块名称就是父级页面yield标签的参数名。
    @section(区块名称)
    代码
    @endsction
    在这里插入图片描述
    效果:
    在这里插入图片描述
    模版包含:
    语法:@include(模版文件名) 文件名不含后缀,语法类似view方法参数
    在这里插入图片描述

    六、CSRF攻击【重点】

    1、什么是CSRF攻击?

    CSRF是跨站请求伪造(Cross-site request forgery)的英文缩写:
    在这里插入图片描述
    Laravel框架中避免CSRF攻击很简单:Laravel自动为每个用户Session生成了一个CSRF Token,该Token可用于验证登录用户和发起请求者是否是同一人,如果不是则请求失败。【该原理和验证码的原理是一致】
    Laravel提供了一个全局帮助函数csrf_token来获取该Token值,因此只需在视图提交表单中添加如下HTML代码即可在请求中带上Token:

    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
    

    2、Laravel中如何避免CSRF攻击

    案例:通过案例实现csrf的机制验证
    ①创建两个路由,一个用于展示表单(get),另外处理请求(post)
    /test6 展示表单 get
    /test7 提交处理 post
    在这里插入图片描述
    ②创建需要的方法
    在这里插入图片描述
    ③创建需要的简易表单
    在这里插入图片描述
    ④提交效果(报错页面)
    在这里插入图片描述
    说明Laravel框架是默认开启了csrf认证的(必须)。

    ⑤解决报错问题(如何通过csrf验证)
    就是可以使用之前说的,可以在表单中添加一个隐藏域:
    在这里插入图片描述
    在html页面中显示如下:
    在这里插入图片描述
    {{csrf_token()}}:表示直接输出token值;
    {{csrf_field()}}:表示的是直接输出整个隐藏域的input框;

    第16行和第17行效果是等价的:
    在这里插入图片描述
    场景选择:一般在视图里用csrf_field即可,大部分的时候在JavaScript代码段中(特别是在做ajax异步提交的时候)可以考虑用csrf_token。

    添加了csrf的token之后,表单就可以正常的提交。
    在这里插入图片描述
    CSRF验证机制与图形验证码的原理是一致的,都是将用户提交的值与与session中的值进行比对,如果一致则通过,否则不通过。

    针对csrf_token与csrf_field的选择问题:
    如果只需要使用值(例如,在ajax的post提交的时候),则使用csrf_token,如果需要的是隐藏域(在表单里),则使用csrf_field。

    3、从CSRF验证中排除例外路由(了解)

    并不是所有请求都需要避免CSRF攻击,比如去第三方API获取数据的请求。
    可以通过在VerifyCsrfToken(app/Http/Middleware/VerifyCsrfToken.php)中间件中将要排除的请求URL添加到$except属性数组中:
    在这里插入图片描述
    排除写法:
    在这里插入图片描述
    说明:如果这个操作不是刚需,则此功能不建议使用。

    展开全文
  • 简单说一下我的逻辑,我也不知道我理解sso不对。 假如三个站点 a.baidu.com b.baidu.com c.baidu.com a.baidu.com 作为验证用户登录账户。 b和c作为客户端(子系统)。 b和c需要登录的时候跳转到a,并且携带...
  • Java的依赖注入已经是一个很常见的概念了,Spring框架主要就是解决了这一点,在PHP的laravel框架中,也出现了依赖注入的方式。 依赖注入就控制反转的一种是实现方式,面向对象的特征的重要体现,那么依赖注入中什么...
  • PHP_Laravel框架(1)

    2021-08-26 18:57:01
    能够使用composer方式部署Laravel框架项目. composer create-project --prefer-dist laravel/laravel=版本号 项目名称 能够解释laravel框架中的主要目录结构. app http/controllers 放了控制器 模型也在app...
    • 能够使用composer方式部署Laravel框架项目.
    composer create-project --prefer-dist laravel/laravel=版本号 项目名称
    • 能够解释laravel框架中的主要目录结构.
    app  http/controllers 放了控制器  模型也在app目录
    
    public 虚拟主机目录
    
    routes 路由目录
    
    resources/views 视图目录
    
    config 配置文件目录
    
    database 创建数据表和模拟数据目录
    
    .env 配置文件
    
    artisan 命令行工具类

    能够使用php artisan serve方式运行laravel项目.

    php artisan serve 命令行运行laravel
    
    默认端口是 8000  --port=端口号
    • 能够说出Laravel框架中定义路由的文件的名称.
    routes
    
    web.php 网页所写的路由
    
    api.php 接口所写的路由
    • 能够说出Laravel框架中的4种基础路由.
    get post put delete
    • 能够说出Laravel框架中的控制器所在的目录.
    app/http/controllers 放了控制器
    • 能够说出Laravel框架中控制器文件的命名规则.
    大驼峰  名称Controller
    • 能够使用命令行创建自定义控制器.
    php artisan make:controller 控制器名
    • 能够使用请求类进行数据的获取.
    Input类
    
    Request类
    
    辅助函数  request() 返回是Request对象
    • 能够返回一个json数据.
    return response()->json([],http状态码) 默认是200
    • 能够掌握Laravel框架中return view()方式加载blade视图模板.
    分目录进行模板管理
    
    return view(目录.文件名)  文件名不要有blade.php
    • 能够使用compact函数向视图中分配变量.
    视图发变量
    
    关联数组
    
    compact
    
    with
    • 能够掌握在Laravel框架视图模板中foreach方式遍历数据.
    @foreach($data as $key=>$val)
    
    
    
    @endforeach
    
    
    
    @forelse()
    
    @empty
    
    @endforelse
    • 能够理解模板继承的概念.
    为了减少维护代码工作量,把相同的部份,提供取公共模板中去。
    
    公共模板中
    
    @yeeld()
    
    
    
    继承的模板中
    
    @extends()
    
    @section() 它有两个使用的方式 单标签  双标签

    一、Laravel简介

    官方网站:https://laravel.com/

    中文官网:https://laravel-china.org/docs/laravel/5.6

    Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

    Laravel框架诞生于2011年6月11日

    号称:为 WEB 艺术家创造的 PHP 框架

    招聘要求

    框架的占比

    1、能让我们代码编写更改优雅,2、提高收入 3、框架趋势

    二、Laravel安装

    2.1、服务器要求

    Laravel5.6 对PHP是有一些要求的。

    PHP >= 7.1.3
    
    OpenSSL PHP
    
    PHP PDO 扩展
    
    PHP fileinfo 扩展
    
    PHP mcrypt 扩展
    
    PHP Mbstring 扩展
    
    PHP Tokenizer 扩展
    
    PHP XML 扩展
    
    PHP Ctype 扩展
    
    PHP JSON 扩展

    一定要把php配置到环境变量中,让我们PHP命令可以在任意的位置可执行。

    2.2、通过composer安装laravel

    composer create-project --prefer-dist laravel/laravel=5.6.* weblaravel
    
    create-project 新建项目
    
    --prefer-dist 以压缩的方式下载
    
    laravel/laravel=5.6.*   创建名称和版本号
    
    weblaravel  下载到本机后,所起的项目名称
    
    切换国内镜像源
    
    composer config -g repo.packagist composer https://packagist.phpcomposer.com
    
    备选
    
    composer config -g repo.packagist composer https://packagist.laravel-china.org

    2.3、让phpstorm更友好支持laravel

    三、目录结构

    3.1、app目录【重要目录】

    项目的核心目录,主要用于存放核心代码,你所编写的代码绝大多数也会放到这里,如控制器、模型等。

    默认模型存放的位置如下,app根目录下面

    但是这种在根目录下面建立模型文档不利于我们后期代码的管理维护,所以我们往往在项目中,手动创建目录,进行目录分隔,即可以在该目录下建立Models目录,如下

    3.2、bootstrap目录

    laravel启动目录,目录包含了框架启动和自动加载设置的文件,autoload.php文件用于自动载入需要的类文件。上线此目录要有可写的权限 chmod –R 777 目录名

    3.3、config目录【重要目录】

    项目的配置目录,主要存放配置文件,比如数据库的配置。

    app.php:项目主要配置文件

    database.php:针对数据库的配置

    3.4、database目录

    目录包含了数据迁移及填充文件,就是使用文件的方式,来管理数据库,创建一个PHP文件,在文件中设计表结构,运行该文件,完成表的创建。

    3.5、public目录

    laravel项目的web虚拟主机指定的目录,项目的入口文件和系统的静态资源目录(css,img,js,uploads)后期使用的外部静态文件(js、css、图片等)都需要放到Public目录下。

    3.6、resources目录【重要目录】

    存放视图文件,还有就是语言包文件的目录。

    注:laravel中我们的模板引擎为blade模板引擎,后缀为.php,例:【welcome.blade.php】

    3.7、routes目录【重要目录】

    定义路由的目录,laravel中所有的访问请求,都必须事先定义好路由,web.php是定义路由的文件。

    3.8、storage目录

    主要是存放缓存文件和日志文件,注意,如果在【linux】环境下,该目录需要有【可写】权限

    3.9、vendor目录

    主要是存放第三方的类库文件和laravel框架的源码, composer下载的类库存放在该目录下面。

    3.10、env文件【重要文件】

    主要是设置一些系统相关的环境配置文件信息。config目录里面的文件配置内容一般都是读取该文件里面的配置信息(config里面的配置项的值基本都是来自.env文件)

    3.11、artisan脚手架文件

    主要用于生成的代码的(自动生成),比如生成控制器,模型文件等。

    执行命令:php artisan 需要执行的指令

    执行此命令有2点要求

    (1)、php必须添加环境变量,并且保证版本能是laravel所要求的版本。

    (2)、执行命令时,artisan文件必须存在当前命令路径下。

    3.12、小结

    四、运行laravel

    4.1、方式一 命令【了解】

    php artisan serve
    
    或指定端口来运行
    
    php artisan serve --port=8000

    需要注意:一旦使用该方式则小黑窗(cmd)不能关闭的,一旦关闭则服务也跟随关闭,网站也就访问不了。修改了.env等一些配置文件,还需要ctrl+c结束进程,重启运行命令,不然修改不生效。

    4.2、方式一 Apache【推荐】

    配置虚拟主机

    # laravel
    
    <VirtualHost *:80>
    
        # 设置网站目录
    
        DocumentRoot "F:/www/class/web69/weblaravel/public"
    
        # 设置网站域名
    
        ServerName www.l.com
    
        # 错误日志
    
        ErrorLog "F:/www/class/web69/weblaravel/logs/error.log"
    
        # 成功日志
    
        CustomLog "F:/www/class/web69/weblaravel/logs/access.log" combined
    
        # 设置目录访问权限
    
        <Directory "F:/www/class/web69/weblaravel/public">
    
            # 指定目录启用特性
    
            Options Indexes FollowSymLinks
    
            # 是否允许使用.htaccess文件
    
            AllowOverride All
    
            # 访问目录权限
    
            Require all granted
    
        </Directory>
    
    </VirtualHost>

    绑定hosts文件

    重启web服务器

    五、CSRF攻击

    5.1、CSRF是什么

    CSRF(Cross-site request forgery),中文名称:跨站请求伪造

    跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。

    5.2、Laravel框架如何处理CSRF

    原理图

     

    定义在routes/web.php文件中的路由,默认就有了csrf验证功能。

    定义在在api.php文件中就没有了csrf验证功能。如果接口就不能用csrf验证。

    5.3、排除指定路由中不进行csrf验证

    并不是所有请求都需要避免CSRF攻击,比如去第三方API获取数据的请求。

    可以通过在VerifyCsrfToken(app/Http/Middleware/VerifyCsrfToken.php)中间件中将要排除的请求URL添加到$except属性数组中。

    六、Laravel路由

    什么是路由

    将用户的请求按照事先规划的方案提交给指定的控制器和方法来进行处理。

    6.1、路由配置文件

    路由文件的位置:项目目录/routes/web.php文件

    6.2、4种基础路由的定义(重点)

    Route::请求方式('uri',匿名函数);
    
    Route::请求方式('uri','控制器名称@操作方法');
    
    
    
    #从服务器取出资源(一项或多项) select
    
    Route::get($uri, $callback);
    
    #在服务器新建一个资源 insert
    
    Route::post($uri, $callback);
    
    #在服务器更新资源  update
    
    Route::put/patch($uri, $callback);
    
    #从服务器删除资源 delete
    
    Route::delete($uri, $callback);
    
    4种基础路由中,只有GET请求方式不进行CSRF验证,其它请求方式则需要CSRF验证

    6.3、其它路由

    Route::match([请求方式,多个以逗号隔开],$uri, $callback);
    
    # 匹配所有请求 工作不用
    
    Route::any($uri, $callback);

    6.4、路由参数

    # 必填
    
    Route::get('URL/{参数名称}','闭包函数或控制器响应方法标识');
    
    # 可选
    
    Route::get('URL/{参数名称?}','闭包函数或控制器响应方法标识');
    
    # 参数限制
    
    Route::get('URL/{参数名称}','闭包函数或控制器响应方法标识')->where(['参数名称'=>'正则']);

    6.5、路由别名【掌握】

    作用:

    • 方便管理生成的URL地址
    • 权限控制
    Route::get('/user/{id}',function($id){
    
        return "当前用户id是:" . $id;
    
    }) -> name('名字');
    
    # 生成了对应的URL地址
    
    $url = route('路由名称');

    6.6、路由组之路由前缀

    比如后台有如下路由

    /admin/login
    
    /admin/logout
    
    /admin/index
    
    /admin/user/add
    
    /admin/user/del
    
    # 上在的路由地址中admin为相同的路由前缀
    
    Route::group(['prefix' => 'admin'], function () {
    
        Route::get('users', function ()    {
    
            // 匹配 "/admin/users" URL
    
        });
    
    });

    注:分组中还可以进行分组,无限制去分组下去,当然不建议无限制的分组下去,一般2到3级就可以了。

    6.7、查看定义好的路由

    php artisan route:list

    七、控制器

    7.1、控制器文件写在哪里?

    7.2、控制器文件如何命名和创建

    注意:使用大驼峰命名,同时注意命名空间和基类控制器的引入

    # 一般控制器
    
    php artisan make:controller 控制器名Controller
    
    # 资源控制器
    
    php artisan make:controller 控制器名Controller –r [--resource]

    7.3、定义路由访问控制器中的方法

    Route::请求方法(URI,'[命名空间\]控制器类名@方法名')

    定义路由

    前台控制器

    Admin模块下面的控制器

    八、请求

    laravel框架为我们提供了多种获取数据的形式,我们常用的形式如下两种

    8.1、Input类来获取数据

    通过接收用户输入的类:Illuminate\Support\Facades\Input来进行获取数据。

    Input::get(‘参数的名字’, ‘如果参数没有被传递使用该默认值’)
    
    Input::all(): 获取所有的用户的输入
    
    Input::only([]): 获取指定几个用户的输入  白名单
    
    Input::except([]): 获取指定几个用户的输入以外的所有的参数  黑名单
    
    Input::has('名称'):判断某个输入的参数是否存在
    
    上述方法即既可以获取get中的信息,也可以获取post中信息。

    定义路由

    控制器

    8.2、Request 获取数据【掌握】

    获取数据功能太过于常用,所以laravel又以一个依赖注入的方式,帮我们实例获取对象。

    定义路由

    控制器

    因为是表单是post提交,所以我们现在还要需要 排除csrf验证

    效果

    8.3、辅助函数方式来获取 request()

    九、响应

    当服务器收到浏览器的请求后,会发送响应消息给浏览器。

    9.1、返回字符串

    在控制器或路由中 echo 或 return 一个字符串就可以了

    return “PHP是世界上最好的语言”;

    9.2、设置cookie

    laravel框架为了安全,它的cookie是加密的

    # 设置cookie
    
    return response('')->cookie('id',111,10,'/');
    
    ##cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
    
    # 读取cookie
    
    echo request()->cookie('id');

    9.3、重定向

    # 路由别名
    
    return redirect()->route('路由别名');

    9.4、json数据返回

    return response()->json([
    
    'name' => 'zhangsan',
    
    'age' => 22
    
    ]);

    十、视图

    视图的用途是用来存放应用程序中 HTML 内容,并且能够将你的控制器层与展示层分开。

    我们在控制器中使用助手函数【view()】来加载视图模板。

    10.1、视图目录位置与命名

    10.2、分配数据到模板

    view(模板文件名称,关联数组)
    
    view(模板文件名称,compact('变量名1','变量名2'))
    
    view(模板文件名称)->with(关联数组)

    view就指定视图模板

    模板

    10.3、模板中输出变量

    10.3.1、变量

    {{$变量名}}
    
    例
    
    {{$name}}

    10.3.2、三元运算

    {{ $name or 'Default' }} 等价于<?php echo isset( $name)?$name:'default'?>

    10.3.3、未转义输出

    如果变量信息里边如果有html标记信息,在输出的时候html标记被转化为符号实体了,而没有被浏览器解析掉,如果希望看到被浏览器解析后的内容,就需要设置两个感叹号

    例如:

    $title = "<a href='http://www.baidu.com'>百度</a>";
    
    {!!$变量!!}

    10.3.4、原始形态输出

    由于很多 JavaScript 框架都使用花括号来表明所提供的表达式,所以你可以使用 @ 符号来告知 Blade 渲染引擎你需要保留这个表达式原始形态。

    <h1>Laravel</h1>
    
    Hello, @{{ $变量名 }}

    10.4、使用函数

    可以在blade模板中直接使用php函数

    {{php函数名()}}

    10.5、if语句

    @if (count($records) === 1)
    
        我有一条记录!
    
    @elseif (count($records) > 1)
    
        我有多条记录!
    
    @else
    
        我没有任何记录!
    
    @endif

    10.6、循环

    @foreach ($users as $key=>$user)
    
    <p>此用户为 {{ $user->id }}</p>
    
    # 如果传过来的就是数组那么我们就用
    
    <p>{{ $user['id'] }}</p>
    
    @endforeach
    
    ---------------------------------------
    
    @forelse ($users as $key=>$user)
    
    <li>{{ $user->name }}</li>
    
    # 如果传过来的就是数组那么我们就用
    
    <p>{{ $user['id'] }}</p>
    
    @empty
    
        <p>没有用户</p>
    
    @endforelse
    
    
    
    注:foreach有循环变量,$loop,$loop->index   当前循环所迭代的索引,起始为 0。

    foreachforelse 在确定有数据的时候,我们就用foreach

    在不确定是否有数据的时候,我们就用forelse

    效果

    10.7、模板包含

    @include('public.header')
    
    # public 表示 views下面的public目录
    
    # header 表示在views/public/header.blade.php文件

    公共html片段

    模板

    10.8、模版继承

    在一个项目中有许多模板文件,它们有一个特点:拥有共同的头部 脚部内容

    为了避免相同代码重复开发、维护 造成工作效率低下

    可以把共同的头部脚部内容集中到一个布局文件中,之后各个具体模板文件去继承该布局文件而使用头部和脚步内容。这个过程成为模板继承

    布局文件中相同的代码只维护一份,会大大提升项目开发效率

    @extends('laoyouts.home') #表示继承resource/views/layouts/home.blade.php布局文件
    
    使用section标签替换布局模板中可变区域;
    
    @section('content')
    
        给布局文件yield('content ')的区域进行填充的内容
    
    @endsection

    定义一个公共的模板

    路由

    控制器

    模板

    效果

    展开全文
  • Laravel框架从零搭建

    2021-11-24 16:33:51
    4. Laravel的模式和架构是比较先进的,详细的理解其代码,开发能力的提升 首先我们需要先搭建本机的laravel 环境,以mac为列,确保已安装了最新的composer和php环境 然后执行下面命令 composer global require...
  • 本文实例讲述了Laravel框架下载,安装及路由操作。分享给大家供大家参考,具体如下:NO.1下载Laravel框架并且安装首先,我们先点击这个链接 https://laravelacademy.org/resources-download 跳转至Laravel学院的资源...
  • laravel框架详解

    2019-01-10 16:48:00
    2011年,Taylor Otwell首次将Laravel带给这个世界,彼时,Laravel就是一个全新且现代的框架Laravel基于MVC架构,可以满足诸如事件处理、用户身份验证等各种需求,同时通过包管理实现模块化和可扩...
  • 本文面向的是php语言laravel框架的用户,介绍的是基于该框架实现的一个简易集成微信登录的方法,需要的朋友可以参考下
  • 详细说下laravel里面所有的定时函数,让你用的如鱼得水~~~~ ->cron($expression) emmm.....这个函数好像从来都没用到过,看英文介绍是“表达频率的cron表达式”,等我有时间在研究一下这个函数。 ->between($...
  • PHP-laravel框架一2

    2022-02-21 15:55:21
    一、模型操作(AR模式)【理解Laravel 自带的 Eloquent ORM 提供了一个美观、简单的与数据库打交道...本身laravel对模型的命名没有严格的要求,一般采用 表名(首字母大写).php 比如:Member.php User.php Goods.
  • Blade 是 laravel 提供的一个简单强大的模板引擎。下面这篇文章主要给大家介绍了关于Laravel框架之blade模板新手的入门教程以及一些使用的小技巧,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
  • laravel框架实践1

    2019-05-05 20:12:49
    Laravel是易于理解且强大的,它提供了强大的工具用以开发大型,健壮的应用。 具有验证、路由、Session、缓存、数据库迁移工具、单元测试等常用的工具和功能。 注意:LTS、非LTS。 长期支持(Long Time Support) ...
  • Laravel框架的体系结构

    2021-05-07 07:34:27
    Laravel被称为“全栈”式框架,因为它...Laravel附带了一个名为Artisan的优秀的命令行工具,它提供了一些开发过程中有用的命令用,可以用来生成框架代码和数据库管理。它是基于强大的Symfony Console 组件开发的。...
  • 一、安装 ComposerLaravel 框架使用 Composer(PHP包管理工具,参考 Composer 中文文档)来管理代码依赖性。 首先,你需要下载 Composer 的 PHAR 打包文件( composer.phar ),下载完成后把它放在项目目录下或者放到 ...
  • Laravel框架 笔记

    2019-11-13 11:04:15
    Laravel框架 中文文档 环境开发和配置要求 PHP >= 7.1.3 OpenSSL PHP PHP PDO 扩展 PHP Mbstring 扩展 PHP Tokenizer 扩展 PHP XML 扩展 extension=php_xmlrpc.dll PHP Ctype 扩展 PHP JSON ...
  • PHP 原生扩展(PHP Native Extension),我们通常指基于 C/C++ 语言开发的 PHP 语言的扩展,需要编译安装,比如我们最常使用的 phpredis、GD、MySQL、cURL 扩展等,这里有一个 PHP 的扩展列表。 PHP 扩展包 PHP ...
  • laravel框架是一套简洁的web开发的框架,具有简介语法,易于理解提供了强大的开发工具。 laravel框架提供了很多功能,如:数据库(DB)、缓存(cache)、会话(session)、上传文件等; laravel框架的优点: 文档...
  • 本文实例讲述了laravel 框架执行流程与原理。分享给大家供大家参考,具体如下:1.index.php$app = require_once __DIR__.'/../bootstrap/app.php';$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class...
  • 最近在学习laravel的框架,此前一直是使用...Laravel框架:Lavavel一直秉承着优雅的原则,很好的支持了composer,实现了更丰富的扩展,社区文档活跃,相较于TP,Lavavel更庞大,安全性也更高,更适合开发大中型项目...
  • laravel框架MVC理解_1030

    2021-04-18 05:10:00
    // 路由解析 $server = $_SERVER; $path_info = $_SERVER['PATH_INFO'];... } } View:welcome.php代码 Welcome welcome China model:newsmodel.php代码: Newsmodel Newsmodel 运行结果截图: 总结理解截图:
  • Laravel框架中的视图操作

    千次阅读 2020-09-01 15:12:11
    (2)文件名的后缀是 .blade.php(因为laravel里面有一套模板引擎就是使用blade,可以直接使用标签语法{{ $title }}, 也可以使用原生的php语法显示数据。) (3)需要注意的是也可以使用.php结尾,但是这样的话就不...
  • laravel框架(视图)

    2020-04-04 11:19:01
    1.视图写在哪里? 注意: a.视图可以分目录管理,也有必要分目录管理 ...(2)文件名的后缀是.blade.php(因为laravel 里面有一套模板引擎就是使用blade,可以直接使用标签语法{{KaTeX parse erro...
  • 确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Laravel时,会变得一目了然胸有成竹。 PHP的生命周期 万物皆有他的生命周期。熟悉Android的同学一定熟悉...
  • 什么是事务事务(Transaction)是由一系列系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。二.什么时候使用事务数据库的数据进行批量或连表操作时,为了保证数据的一致性和正确性,我们需要添加事务...
  • laravel框架

    2020-11-26 10:31:09
    laravel框架 概念 Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,同时提供了完整而清晰的文档,而且为快速、安全地开发现代应用提供了必要的功能。 2011年,Taylor Otwell首次将Laravel带给这个世界,...
  • laravel框架基础知识

    2019-10-03 07:28:14
    一、laravel简介 laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,...本篇学习笔记以laravel5.2.15版本为框架的版本基础;更多版本请移步https://www.golaravel.com/ 三、laravel下载安装以及开发环境...

空空如也

空空如也

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

对laravel框架的理解