laravel入门_laravel开发入门 - CSDN
精华内容
参与话题
  • laravel入门(一)

    千次阅读 2020-03-07 18:01:17
    近期我也在大众趋势的带领下开始了我的“laravel征程之旅”。本着做笔记的记录方式给大家分享一下我学习过程中的心得,因为是初学,可能有不正确的地方希望大家能够指出。 laravel的环境 PHP版本的选择 Laravel 5.1...

    序言

    laravel框架被称为“最优雅的PHP框架”,而且常年排行“最受欢迎的PHP框架”榜首。近期我也在大众趋势的带领下开始了我的“laravel征程之旅”。本着做笔记的记录方式给大家分享一下我学习过程中的心得,因为是初学,可能有不正确的地方希望大家能够指出。

    • laravel的环境
    1. PHP版本的选择

    Laravel 5.1  PHP对应的版本>=5.5.9

    Laravel 5.2  PHP对应的版本>=5.5.9

    Laravel 5.3  PHP对应的版本>=5.6.4

    Laravel 5.4  PHP对应的版本>=5.6.4

    Laravel 5.5  PHP对应的版本>=7.0.0

    Laravel 5.6  PHP对应的版本>=7.1.3

    1. PHP的扩展

    Openssl扩展库

    PDO扩展库

    tokenizse扩展库

    mbstring扩展库

    这些在phpinfo()中自检即可,若未开启需要去php.ini中开启。

    • laravel的安装
    1. 源码包安装

    这个比较简单,直接在社区下载安装包解压即可。下载链接:http://laravelacademy.org/resources-download

    需要注意的是laravel的根目录是public,配置站点时将网站根目录指向public即可。

    1. comsper安装

    ① 什么是Composer?

    Composer是php的类库管理器(上传类、验证码类....),可以帮我们自动去互联网下载开发过程中所需要的类库文件和Linux下包管理器yum比较类似。可以理解成360软件管家 QQ软件管家

    ②composer安装

    去这个网站下载https://getcomposer.org/download/安装包,运行安装,选择依赖的PHP版本,直接指向你电脑上的php.exe文件。当出现下图就说明安装成功啦。(不要嫌麻烦,comsper不仅是只能安装laravel框架,还可以安装很多的软件包,如验证码包等)

    安装成功后使用cmd进入你需要搭建laravel框架的文件夹中,配置一下镜像(为什么要配置镜像?因为大部分的软件在国外, 安装的时候速度比较慢,有时还会出错, 所以就提供了一份一样的软件库在国内. 这个就叫做镜像.)

    执行以下代码:

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

    然后开始安装laravel:

    composer -v create-project laravel/laravel laravel //下载当前php版本支持的最新版本laravel到laravel文件夹中
    
    
    composer create-project --prefer-dist laravel/laravel blog "5.8.*"//下载laravel5.8到blog文件夹中
    

    这里分别是什么意思呢,看下图

    所以上个命令的意思就是把laravel框架下载到laravel文件夹中,如果不存在会自动创建。

    • laravel的目录结构

    一张图看懂laravel的目录,就问你腻不腻害(~ ̄▽ ̄)~ !

    • 路由

    laravel是一个重路由的框架,可以不写控制器、也不可以写模型、也可以不写视图,但是路由不写就会报错。

    路由都写在routes\web文件中,定义语法:

    //一般路由
    Route::get('/test',function (){
        return "hello word";
    });
    
    //带参数路由,?代表可选参数,使用可选参数路由时, 需要给默认值, 否则会出错;不带?表示必填参数,必填参数无值时路由会报404。
    Route::get('/test/{id?}/{name?}', function ($id=0,$name='lihua') {
        return "这里是test方法,id参数为$id,名字是$name";
    });
    //参数的正则约束,单参数
    Route::get('/test/{id?}/{name?}', function ($id=0,$name='lihua') {
        return "这里是test方法,id参数为$id,名字是$name";
    })->where('id','\d+');
    //参数的正则约束,多参数约束,数组形式
    Route::get('/test/{id?}/{name?}', function ($id=0,$name='lihua') {
        return "这里是test方法,id参数为$id,名字是$name";
    })->where(['id'=>'\d+','name'=>'\w+']);
    //路由到控制器
    Route::get('/index/test','TestController@test');
    

     

    展开全文
  • Laravel 入门基础教程

    千次阅读 2018-01-06 08:23:39
    本文重点介绍如何开始使用 Laravel。 读完本文,你将学到: 如何安装 Laravel,新建 Laravel 程序,如何连接数据库; Laravel 程序的基本文件结构; MVC(模型,视图,控制器)和 REST 架构的基本原理; ...

    本文重点介绍如何开始使用 Laravel。

    读完本文,你将学到:

    • 如何安装 Laravel,新建 Laravel 程序,如何连接数据库;
    • Laravel 程序的基本文件结构;
    • MVC(模型,视图,控制器)和 REST 架构的基本原理;
    • 如何快速生成 Laravel 程序骨架;

    1 前提条件

    本文针对想从零开始开发 Laravel 程序的初学者,不需要预先具备任何的 Laravel 使用经验。不过,为了能顺利阅读,还是需要事先安装好一些软件:

    Laravel 是使用 PHP 语言开发的网页程序框架。如果之前没接触过 PHP,学习 Laravel 可要深下一番功夫。网上有很多资源可以学习 PHP:

    PHP 语言官方网站: http://php.net/

    2 Laravel 是什么?

    Laravel 是使用 PHP 语言编写的网页程序开发框架,目的是为开发者提供常用组件,简化网页程序的开发。只需编写较少的代码,就能实现其他编程语言或框架难以企及的功能。经验丰富的 PHP 程序员会发现,Laravel 让程序开发变得更有乐趣。

    Laravel 哲学

    • Laravel 是一套富有表达性且具有简洁语法的网页应用程序框架。我们认为开发过程应该是愉悦且有创造性的体验。Laravel 努力减少开发过程中的不便,因此我们提供了验证(authentication)、路由(routing)、sessions、缓存(caching)等开发过程中经常用到的工具或功能。

    • Laravel 目标是给开发者创造一个愉快的开发过程,并且不牺牲应用程序的功能性。快乐的开发者才能创造最棒的代码。为了这个目的,我们竭取了各框架的优点集中到 Laravel 中,这些框架包括并不局限于 Ruby on Rails、ASP.NET MVC 和 Sinatra 等。

    • Laravel 是易于理解且强大的,它提供了强大的工具来开发大型、稳健的应用程序。杰出的 IoC、数据库迁移工具和紧密集成的单元测试,这些工具赋予您构建任何大小规模的应用程序的能力。

    3 新建 Laravel 程序

    阅读本文时,最好跟着一步一步操作,如果错过某段代码或某个步骤,程序就可能出错,所以请一步一步跟着做。

    本文会新建一个名为 blog 的 Laravel 程序,这是一个非常简单的博客。

    文中的示例代码使用 $ 表示命令行提示符,你的提示符可能修改过,所以会不一样。在 Windows 中,提示符可能是 c:\source_code>。

    3.1 安装 Laravel

    打开命令行:在 Mac OS X 中打开 Terminal.app,在 Windows 中选择“运行”,然后输入“cmd.exe”。下文中所有以 $ 开头的代码,都要在命令行中运行。先确认是否安装了 PHP 5.4 或者以上的版本:

    有很多工具可以帮助你快速在系统中安装 PHP 。Windows 用户可以使用 WAMP,Mac OS X 用户可以使用 MAMP。

    $ php -v    
    PHP 5.4.10 (cli) (built: Jan 21 2013 15:12:32)  
    Copyright (c) 1997-2012 The PHP Group  
    Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies  
         with XCache v2.0.1, Copyright (c) 2005-2012, by mOo  
    

    如果你还没安装 PHP,请访问 http://php.net/ ,找到针对所用系统的安装方法。

    很多类 Unix 系统都自带了版本尚新的 SQLite3。Windows 等其他操作系统的用户可以在 SQLite3 的网站上找到安装说明。然后,确认是否在 PATH 中:

    $ sqlite3 --version
    

    安装 Laravel , 通过 Laravel 安装器

    首先, 使用 Composer 全局下载并安装 Laravel/installer:

    $ composer global require "laravel/installer=~1.1"
    

    请确定把 ~/.composer/vendor/bin 路径放置于您的 PATH 里, 这样laravel 可执行文件才能被命令行找到, 以后您就可以在命令行下直接使用 laravel 命令.

    安装并且配置成功后, 可以使用命令 laravel new 在您指定的目录下创建一份全新安装的 Laravel 应用, 如这样的调用: laravel new blog 将会在当前目录下创建一个叫 blog 的目录, 此目录里面存放着全新安装的 Laravel 应用, 此方法跟其他方法不一样的地方在于是提前安装好所有代码依赖的, 您无需再通过composer install 安装, 速度一下子提高了很多.

    Laravel 框架使用 composer 来执行安装及管理依赖。如果还没有安装它的话,请先从 安装 Composer 开始吧。

    安装之后,您可以通过终端执行下列命令来安装 Laravel:

    $ composer create-project laravel/laravel your-project-name --prefer-dist
    

    这个命令会下载并安装一份全新的 Laravel 存放在指定的 your-project-name 的目录中。

    如果您想要手动安装 Laravel 可以直接从 Github 上的 Laravel Respoitory下载一份代码。然后在解压后的根目录里,执行 composer install 即可,这个命令会把框架所需要的依赖下载完整。

    3.2 创建 Blog 程序

    Artisan 是 Laravel 内建的命令行工具,它提供了一些有用的命令协助您开发,它是由强大的 Symfony Console 组件所驱动。

    打开终端,进入有写权限的文件夹,执行以下命令生成一个新程序:

    $ laravel new blog
    

    或者

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

    这个命令会在文件夹 blog 中新建一个 Laravel 程序。

    执行 laravel new -h 可以查看新程序生成器的所有命令行选项。

    生成 blog 程序后,进入该文件夹:

    $ cd blog  
    

    blog 文件夹中有很多自动生成的文件和文件夹,组成一个 Laravel 程序。本文大部分时间都花在 app 文件夹上。下面简单介绍默认生成的文件和文件夹的作用:

    文件/文件夹 作用
    app/ 包含了站点的 controllers(控制器),models(模型),views(视图)和 assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这些上面。本文主要关注的是这个文件夹。
    bootstrap 用来存放系统启动时需要的文件,这些文件会被如 index.php 这样的文件调用。
    public 这个文件夹是唯一外界可以看到的,是必须指向你 web 服务器的目录。它含有 laravel 框架核心的引导文件 index.php,这个目录也可用来存放任何可以公开的静态资源,如 css,Javascript,images 等。
    vendor 用来存放所有的第三方代码,在一个典型的 Laravel 应用程序,这包括 Laravel 源代码及其相关,并含有额外的预包装功能的插件。
    app/config/ 配置应用程序的运行时规则、 数据库、 session等等。包含大量的用来更改框架的各个方面的配置文件。大部分的配置文件中返回的选项关联PHP数组。
    app/config/app.php 各种应用程序级设置,即时区、 区域设置(语言环境)、 调试模式和独特的加密密钥。
    app/config/auth.php 控制在应用程序中如何进行身份验证,即身份验证驱动程序。
    app/config/cache.php 如果应用程序利用缓存来加快响应时间,要在此配置该功能。
    app/config/compile.php 在此处可以指定一些额外类,去包含由‘artisan optimize’命令声称的编译文件。这些应该是被包括在基本上每个请求到应用程序中的类。
    app/config/database.php 包含数据库的相关配置信息,即默认数据库引擎和连接信息。
    app/config/mail.php 为电子邮件发件引擎的配置文件,即 SMTP 服务器,From:标头
    app/config/session.php 控制Laravel怎样管理用户sessions,即session driver, session lifetime。
    app/config/view.php 模板系统的杂项配置。
    app/controllers 包含用于提供基本的逻辑、 数据模型交互以及加载应用程序的视图文件的控制器类。
    app/database/migrations/ 包含一些 PHP 类,允许 Laravel更新当前数据库的架构并同时保持所有版本的数据库的同步。迁移文件是使用Artisan工具生成的。
    app/database/seeds/ 包含允许Artisan工具用关系数据来填充数据库表的 PHP 文件。
    app/lang/ PHP 文件,其中包含使应用程序易于本地化的字符串的数组。默认情况下目录包含英语语言的分页和表单验证的语言行。
    app/models/ 模型是代表应用程序的信息(数据)和操作数据的规则的一些类。在大多数情况下,数据库中的每个表将对应应用中的一个模型。应用程序业务逻辑的大部分将集中在模型中。
    app/start/ 包含与Artisan工具以及全球和本地上下文相关的自定义设置。
    app/storage/ 该目录存储Laravel各种服务的临时文件,如session, cache, compiled view templates。这个目录在web服务器上必须是可以写入的。该目录由Laravel维护,我们可以不关心。
    app/tests/ 该文件夹给你提供了一个方便的位置,用来做单元测试。如果你使用PHPUnit,你可以使用Artisan工具一次执行所有的测试。
    app/views/ 该文件夹包含了控制器或者路由使用的HTML模版。请注意,这个文件夹下你只能放置模版文件。其他的静态资源文件如css, javascript和images文件应该放在/public文件夹下。
    app/routes.php 这是您的应用程序的路由文件,其中包含路由规则,告诉 Laravel 如何将传入的请求连接到路由处理的闭包函数、 控制器和操作。该文件还包含几个事件声明,包括错误页的,可以用于定义视图的composers。
    app/filters.php 此文件包含各种应用程序和路由筛选方法,用来改变您的应用程序的结果。Laravel 具有访问控制和 XSS 保护的一些预定义筛选器。

    4 Hello, Laravel!

    首先,我们来添加一些文字,在页面中显示。为了能访问网页,要启动程序服务器。

    $ php artisan serve
    

    上述命令会启动 PHP 内建的开发服务器,要查看程序,请打开一个浏览器窗口,访问 http://localhost:8000 。应该会看到默认的 Laravel 信息页面:

    要想停止服务器,请在命令行中按 Ctrl+C 键。服务器成功停止后回重新看到命令行提示符。在大多数类 Unix 系统中,包括 Mac OS X,命令行提示符是 $ 符号。

    4.2 显示“Hello, Laravel!”

    要在 Laravel 中显示“Hello, Laravel!”,需要新建一个控制器和视图。

    控制器用来接受向程序发起的请求。路由决定哪个控制器会接受到这个请求。一般情况下,每个控制器都有多个路由,对应不同的动作。动作用来提供视图中需要的数据。

    视图的作用是,以人类能看懂的格式显示数据。有一点要特别注意,数据是在控制器中获取的,而不是在视图中。视图只是把数据显示出来。默认情况下,视图使用 Blade 编写,经由 Laravel 解析后,再发送给用户。

    控制器可用控制器生成器创建,你要告诉生成器,我想要个名为“welcome”的控制器,如下所示:

    $ php artisan controller:make WelcomeController --only=index
    

    运行上述命令后,Laravel 会生成 app/controllers/WelcomeController.php 文件。生成文件后修改其中的 index 方法:

        public function index()
        {
            return View::make('welcome.index');
        }
    

    **创建视图: **

    • 在 app/views/ 目录新建文件夹 welcome 并创建文件 index.blade.php ;
    • 在 index.blade.php 文件中添加 <h1>Hello, Laravel!</h1> ;

    4.3 设置程序的首页

    我们已经创建了控制器和视图,现在要告诉 Laravel 在哪个地址上显示“Hello, Laravel!”。这里,我们希望访问根地址 http://localhost:8000 时显示。但是现在显示的还是欢迎页面。

    我们要告诉 Laravel 真正的首页是什么。

    在编辑器中打开 app/routes.php 文件。

    <?php
    
    /*
    |--------------------------------------------------------------------------
    | Application Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register all of the routes for an application.
    | It's a breeze. Simply tell Laravel the URIs it should respond to
    | and give it the Closure to execute when that URI is requested.
    |
    */
    
    Route::get('/', function()
    {
        return View::make('hello');
    });
    

    我们找到 :

    Route::get('/', function()
    {
        return View::make('hello');
    });
    

    修改为:

    Route::get('/', 'WelcomeController@index');
    

    告知 Laravel,访问程序的根路径时,交给 welcome 控制器中的 index 动作处理。

    5 开始使用

    前文已经介绍如何创建控制器、动作和视图,下面我们来创建一些更实质的功能。

    在此之前我们需要修改一些配置:

    • app/config/app.php 文件中的 debug 选项设置为 true (注:开启开发模式,更友好的开发提示);
    • app/config/database.php 文件中的 default 选项设置为 sqlite (注:我们之前选择 sqlite 作为默认数据库);

    在博客程序中,我们要创建一个新“资源”。资源是指一系列类似的对象,比如文章,人和动物。

    资源可以被创建、读取、更新和删除,这些操作简称 CRUD。

    Laravel 提供了资源控制器可以简单的建立跟资源相关的 RESTful 控制器。 创建文章资源后,app/routes.php 文件的内容新增如下:

    Route::resource('articles', 'ArticlesController');
    

    执行 $ php artisan routes 任务,会看到定义了所有标准的 REST 动作。输出结果中各列的意义稍后会说明。

    +--------+-----------------------------------+------------------+----------------------------+----------------+---------------+
    | Domain | URI                               | Name             | Action                     | Before Filters | After Filters |
    +--------+-----------------------------------+------------------+----------------------------+----------------+---------------+
    |        | GET|HEAD /                        |                  | WelcomeController@index    |                |               |
    |        | GET|HEAD articles                 | articles.index   | ArticlesController@index   |                |               |
    |        | GET|HEAD articles/create          | articles.create  | ArticlesController@create  |                |               |
    |        | POST articles                     | articles.store   | ArticlesController@store   |                |               |
    |        | GET|HEAD articles/{articles}      | articles.show    | ArticlesController@show    |                |               |
    |        | GET|HEAD articles/{articles}/edit | articles.edit    | ArticlesController@edit    |                |               |
    |        | PUT articles/{articles}           | articles.update  | ArticlesController@update  |                |               |
    |        | PATCH articles/{articles}         |                  | ArticlesController@update  |                |               |
    |        | DELETE articles/{articles}        | articles.destroy | ArticlesController@destroy |                |               |
    +--------+-----------------------------------+------------------+----------------------------+----------------+---------------+
    
    

    下一节,我们会加入新建文章和查看文章的功能。这两个操作分别对应于 CRUD 的 C 和 R,即创建和读取。

    5.1 挖地基

    首先,程序中要有个页面用来新建文章。一个比较好的选择是 /articles/create。这个路由前面已经定义了,可以访问。打开 http://localhost:8000/articles/create ,会看到如下的路由错误:

    产生这个错误的原因是,没有定义用来处理该请求的控制器。解决这个问题的方法很简单:创建名为 ArticlesController 的控制器。执行下面的命令即可:

    $ php artisan controller:make ArticlesController
    

    打开刚生成的 app/controllers/ArticlesController.php 文件,控制器就是一个类,继承自 BaseController。在这个 ArticlesController 类中定义了对应的资源动作。动作的作用是处理文章的 CRUD 操作。

    修改 ArticlesController.php 文件中的

        public function create()
        {
            //
        }
    

        public function create()
        {
            return View::make('articles.create');
        }
    

    在 PHP 中,方法分为 public、private 和 protected 三种,只有 public 方法才能作为控制器的动作。

    现在刷新 http://localhost:8000/articles/create ,会看到一个新错误:

    产生这个错误的原因是,Laravel 希望这样的常规动作有对应的视图,用来显示内容。没有视图可用,Laravel 就报错了。

    新建文件 app/views/articles/create.blade.php,写入如下代码:

    <h1>New Article</h1>
    

    再次刷新 http://localhost:8000/articles/create , 可以看到页面中显示了一个标头。现在路由、控制器、动作和视图都能正常运行了。接下来要编写新建文章的表单了。

    5.2 首个表单

    要在模板中编写表单,可以使用“表单构造器”。Laravel 中常用的表单构造器是 Form。在 app/views/articles/create.blade.php 文件中加入以下代码:

    {{ Form::open() }}
        <p>
            {{ Form::text('title') }}
        </p>
        <p>
            {{ Form::text('text') }}
        </p>
        <p>
            {{ Form::submit('submit') }}
        </p>
    {{ Form::close() }}
    

    现在刷新页面,会看到上述代码生成的表单。在 Laravel 中编写表单就是这么简单!

    在 Form 方法的块中,Form::text 创建了两个标签和两个文本字段,一个用于文章标题,一个用于文章内容。最后,Form::submit 创建一个提交按钮。

    不过这个表单还有个问题。如果查看这个页面的源码,会发现表单 action 属性的值是 /articles/create。这就是问题所在,因为其指向的地址就是现在这个页面,而这个页面是用来显示新建文章表单的。

    要想转到其他地址,就要使用其他的地址。这个问题可使用 Form::open 方法的 url 参数解决。在 Laravel 中,用来处理新建资源表单提交数据的动作是 store,所以表单应该转向这个动作。

    修改 app/views/articles/create.blade.php 文件中的 Form::open,改成这样:

    {{ Form::open(array('url' => 'articles')) }}
    

    这里,我们把 url 参数的值设为 articles 。对应的地址是 /articels,默认情况下,这个表单会向这个路由发起 POST 请求。这个路由对应于 ArticlesController 控制器的 store 动作。

    表单写好了,路由也定义了,现在可以填写表单,然后点击提交按钮新建文章了。

    5.3 创建文章

    提交表单,会看到一个白屏。现在暂且不管这个错误。store 动作的作用是把新文章保存到数据库中。

    提交表单后,其中的字段以参数的形式传递给 Laravel。这些参数可以在控制器的动作中使用,完成指定的操作。要想查看这些参数的内容,可以把 store 动作改成:

        public function store()
        {
            dd(Input::all());
        }
    

    dd 函数为 Laravel 内置的打印输出函数,Input::all() 取得所有发出请求时传入的输入数据。

    如果现在再次提交表单,不会再看到白屏错误,而是会看到类似下面的文字:

    array (size=3)
      '_token' => string 'plx6TrGRWfHakBlKybUzkRTH8r712JU4rWfiPTs7' (length=40)
      'title' => string 'First article!' (length=14)
      'text' => string 'This is my first article.' (length=25)
    

    store 动作把表单提交的参数显示出来了。不过这么做没什么用,看到了参数又怎样,什么都没发生。

    5.4 创建 Article 模型

    在 Laravel 中,模型的名字使用单数,对应的数据表名使用复数。

    创建 app/models/Article.php 并写入以下代码:

    <?php
    
    class Article extends Eloquent {
    
    }
    

    注意我们并没有告诉 Eloquent Article 模型会使用哪个数据库表。若没有特别指定,系统会默认自动对应名称为「类名称的小写复数形态」的数据库表。所以,在上面的例子中, Eloquent 会假设 Article 将把数据存在 articles 数据库表。

    5.5 运行迁移

    使用 Artisan CLI 的 migrate:make 命令建立迁移文件:

    $ php artisan migrate:make create_articles_table --create=articles
    

    迁移文件会建立在 app/database/migrations 目录下,文件名会包含时间戳,用于在执行迁移时用来决定顺序。

    app/database/migrations/2014_09_03_084339_create_articles_table.php (你的迁移文件名可能有点不一样)文件的内容如下所示:

    <?php
    
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateArticlesTable extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('articles', function(Blueprint $table)
            {
                $table->increments('id');
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::drop('articles');
        }
    
    }
    

    修改其中的创建代码为:

            Schema::create('articles', function(Blueprint $table)
            {
                $table->increments('id');
                $table->string('title');
                $table->text('text');
                $table->timestamps();
            });
    

    在这个迁移中定义了一个名为 up 的方法,在运行迁移时执行。up 方法中定义的操作都是可以通过 down 方法实现可逆的,Laravel 知道如何撤销这次迁移操作。运行迁移后,会创建 articles 表,以及一个字符串字段和文本字段。同时还会创建两个时间戳字段,用来跟踪记录的创建时间和更新时间。

    然后,使用 Artisan 命令运行迁移:

    $ php artisan migrate
    

    Laravel 会执行迁移操作,告诉你创建了 articles 表。

    Migration table created successfully. Migrated: 2014_09_03_084339_create_articles_table

    5.6 在控制器中保存数据

    再回到 ArticlesController 控制器,我们要修改 store 动作,使用 Article 模型把数据保存到数据库中。打开 app/controllers/ArticlesController.php 文件,把 store 动作修改成这样:

        public function store()
        {
                $article = Article::create(array('title'=>Input::get('title'), 'text'=>Input::get('text')));
    
            return Redirect::route('articles.show', array($article->id));
        }
    

    同时在 app/models/Article.php 添加 :

    protected $fillable = array('title', 'text');
    

    fillable 属性允许在动作中调用模型的 create 方法使用 title 和 text 属性。

    再次访问 http://localhost:8000/articles/create ,填写表单,还差一步就能创建文章了。

    5.7 显示文章

    和前面一样,我们要在 app/controllers/ArticlesController.php 文件中更改 show 动作,以及相应的视图文件。

        public function show($id)
        {
            $article = Article::find($id);
    
            return View::make('articles.show', compact('article'));
        }
    

    然后,新建 app/views/articles/show.blade.php 文件,写入下面的代码:

    <p>
      <strong>Title:</strong>
      {{ $article->title }}
    </p>
    
    <p>
      <strong>Text:</strong>
      {{ $article->text }}
    </p>
    

    做了以上修改后,就能真正的新建文章了。访问 http://localhost:8000/articles/create ,自己试试。

    5.8 列出所有文章

    我们还要列出所有文章,对应的路由是:

    GET|HEAD articles | articles.index | ArticlesController@index

    在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 index 动作:

        public function index()
        {
            $articles = Article::all();
    
            return View::make('articles.index', compact('articles'));
        }
    

    然后编写这个动作的视图,保存为 app/views/articles/index.blade.php:

    <h1>Listing articles</h1>
    
    <table>
      <tr>
        <th>Title</th>
        <th>Text</th>
      </tr>
    
      @foreach ($articles as $article)
        <tr>
          <td>{{ $article->title }}</td>
          <td>{{ $article->text }}</td>
        </tr>
      @endforeach
    </table>
    

    现在访问 http://localhost:8000/articles ,会看到已经发布的文章列表。

    5.9 添加链接

    至此,我们可以新建、显示、列出文章了。下面我们添加一些链接,指向这些页面。

    打开 app/views/welcome/index.blade.php 文件,添加:

    {{ link_to_route('articles.index', 'My Blog') }} 
    

    link_to_route 是 Laravel 内置的视图帮助方法之一,根据提供的文本和地址创建超链接。这上面这段代码中,地址是文章列表页面。

    接下来添加到其他页面的链接。先在 app/views/articles/index.blade.php 中添加“New Article”链接,放在

    标签之前:
    {{ link_to_route('articles.create', 'New article') }}
    

    点击这个链接后,会转向新建文章的表单页面。

    然后在 app/views/articles/create.blade.php 中添加一个链接,位于表单下面,返回到 index 动作:

    {{ link_to_route('articles.index', 'Back') }}
    

    最后,在 app/views/articles/show.blade.php 模板中添加一个链接,返回 index 动作,这样用户查看某篇文章后就可以返回文章列表页面了:

    {{ link_to_route('articles.index', 'Back') }}
    

    5.10 添加数据验证

    在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 store 动作:

        public function store()
        {
            $rules = array('title' => 'required|min:5');
    
            $validator = Validator::make(Input::all(), $rules);
    
            if ($validator->fails())
            {
                return Redirect::route('articles.create')
                    ->withErrors($validator)
                    ->withInput();
            }
    
            $article = Article::create(array('title'=>Input::get('title'), 'text'=>Input::get('text')));
    
            return Redirect::route('articles.show', array($article->id));
        }
    

    然后修改 app/views/articles/create.blade.php 添加 :

    @if ($errors->any())
    <div id="error_explanation">
        <h2>{{ count($errors->all()) }} prohibited
          this article from being saved:</h2>
        <ul>
        @foreach ($errors->all() as $message)
          <li>{{ $message }}</li>
        @endforeach
        </ul>
      </div>
    @endif
    

    再次访问 http://localhost:8000/articles/create ,尝试发布一篇没有标题的文章,会看到一个很有用的错误提示。

    5.11 更新文章

    我们已经说明了 CRUD 中的 CR 两种操作。下面进入 U 部分,更新文章。

    首先,要在 ArticlesController 中更改 edit 动作:

        public function edit($id)
        {
            $article = Article::find($id);
    
            return View::make('articles.edit', compact('article'));
        }
    

    视图中要添加一个类似新建文章的表单。新建 app/views/articles/edit.blade.php 文件,写入下面的代码:

    <h1>Editing Article</h1>
    
    @if ($errors->any())
    <div id="error_explanation">
        <h2>{{ count($errors->all()) }} prohibited
          this article from being saved:</h2>
        <ul>
        @foreach ($errors->all() as $message)
          <li>{{ $message }}</li>
        @endforeach
        </ul>
      </div>
    @endif
    
    {{ Form::open(array('route' => array('articles.update', $article->id), 'method' => 'put')) }}
        <p>
            {{ Form::text('title', $article->title) }}
        </p>
        <p>
            {{ Form::text('text', $article->text) }}
        </p>
        <p>
            {{ Form::submit('submit') }}
        </p>
    {{ Form::close() }}
    
    {{ link_to_route('articles.index', 'Back') }}
    

    这里的表单指向 update 动作

    method: put ( patch ) 选项告诉 Laravel,提交这个表单时使用 PUT 方法发送请求。根据 REST 架构,更新资源时要使用 HTTP PUT 方法。

    然后,要在 app/controllers/ArticlesController.php 中更新 update 动作:

        public function update($id)
        {
            $rules = array('title' => 'required|min:5');
    
            $validator = Validator::make(Input::all(), $rules);
    
            if ($validator->fails())
            {
                return Redirect::route('articles.create')
                    ->withErrors($validator)
                    ->withInput();
            }
    
            $article = Article::find($id);
    
            $article->title = Input::get('title');
            $article->text = Input::get('text');
            $article->save();
    
            return Redirect::route('articles.show', array($article->id));
        }
    

    最后,我们想在文章列表页面,在每篇文章后面都加上一个链接,指向 edit 动作。打开 app/views/articles/index.blade.php 文件,在“Show”链接后面添加“Edit”链接:

    <table>
      <tr>
        <th>Title</th>
        <th>Text</th>
        <th colspan="2"></th>
      </tr>
    
      @foreach ($articles as $article)
        <tr>
          <td>{{ $article->title }}</td>
          <td>{{ $article->text }}</td>
          <td>{{ link_to_route('articles.show', 'Show', $article->id) }}</td>
          <td>{{ link_to_route('articles.edit', 'Edit', $article->id) }}</td>
        </tr>
      @endforeach
    </table>
    

    我们还要在 app/views/articles/show.blade.php 模板的底部加上“Edit”链接:

    {{ link_to_route('articles.index', 'Back') }} |
    {{ link_to_route('articles.edit', 'Edit', $article->id) }}
    

    5.12 使用局部视图去掉视图中的重复代码

    编辑文章页面和新建文章页面很相似,显示错误提示的代码是相同的。下面使用局部视图去掉两个视图中的重复代码。

    新建 app/views/notifications.blade.php 文件,写入以下代码:

    @if ($errors->any())
    <div id="error_explanation">
        <h2>{{ count($errors->all()) }} prohibited
          this article from being saved:</h2>
        <ul>
        @foreach ($errors->all() as $message)
          <li>{{ $message }}</li>
        @endforeach
        </ul>
      </div>
    @endif
    

    下面来修改 app/views/articles/creat.blade.php 和 edit.blade.php 视图,使用新建的局部视图,把其中的上面代码全删掉,替换成:

    @include('notifications')
    

    5.13 删除文章

    现在介绍 CRUD 中的 D,从数据库中删除文章。按照 REST 架构的约定,删除文章的路由是:

    DELETE articles/{articles} | articles.destroy | ArticlesController@destroy

    删除资源时使用 DELETE 请求。如果还使用 GET 请求,可以构建如下所示的恶意地址:

    <a href='http://example.com/articles/1/destroy'>look at this cat!</a>
    

    删除资源使用 DELETE 方法,路由会把请求发往 app/controllers/ArticlesController.php 中的 destroy 动作。修改 destroy 动作:

        public function destroy($id)
        {
            Article::destroy($id);
    
            return Redirect::route('articles.index');
        }
    

    想把记录从数据库删除,可以在模型对象上调用 destroy 方法。注意,我们无需为这个动作编写视图,因为它会转向 index 动作。

    最后,在 index 动作的模板(app/views/articles/index.blade.php)中加上“Destroy”链接:

    <table>
      <tr>
        <th>Title</th>
        <th>Text</th>
        <th colspan="2"></th>
      </tr>
    
      @foreach ($articles as $article)
        <tr>
          <td>{{ $article->title }}</td>
          <td>{{ $article->text }}</td>
          <td>{{ link_to_route('articles.show', 'Show', $article->id) }}</td>
          <td>{{ link_to_route('articles.edit', 'Edit', $article->id) }}</td>
          <td>
            {{ Form::open(array('method' => 'DELETE', 'route' => array('articles.destroy', $article->id))) }}
              {{ Form::submit('Delete') }}
            {{ Form::close() }}
          </td>
        </tr>
      @endforeach
    </table>
    

    恭喜,现在你可以新建、显示、列出、更新、删除文章了。

    接下来做什么

    至此,我们开发了第一个 Laravel 程序,请尽情的修改、试验。在开发过程中难免会需要帮助,如果使用 Laravel 时需要协助,可以使用这些资源:

    常见问题

    使用 Laravel 时,最好使用 UTF-8 编码存储所有外部数据。

    如果编码出错,常见的征兆是浏览器中显示很多黑色方块和问号。还有一种常见的符号是“ü”,包含在“ü”中。

    非 UTF-8 编码的数据经常来源于:

    • 你的文本编辑器:大多数文本编辑器(例如 TextMate)默认使用 UTF-8 编码保存文件。如果你的编辑器没使用 UTF-8 编码,有可能是你在模板中输入了特殊字符(例如 é),在浏览器中显示为方块和问号。这种问题也会出现在国际化文件中。默认不使用 UTF-8 保存文件的编辑器(例如 Dreamweaver 的某些版本)都会提供一种方法,把默认编码设为 UTF-8。记得要修改。
    • 你的数据库:默认情况下,Laravel 会把从数据库中取出的数据转换成 UTF-8 格式。如果数据库内部不使用 UTF-8 编码,就无法保存用户输入的所有字符。例如,数据库内部使用 Latin-1 编码,用户输入俄语、希伯来语或日语字符时,存进数据库时就会永远丢失。如果可能,在数据库中尽量使用 UTF-8 编码。









    展开全文
  • laravel入门教程(一)

    万次阅读 2018-06-03 13:20:05
    laravel入门教程(一) 本教程是针对 laravel 5 来讲解的 0.1、一个简单的示例 //文件:routes/web.php &lt;?php Route::get('/','WelcomeController@index'); //文件:app/...

    laravel入门教程(一)

    本教程是针对 laravel 5 来讲解的

    0.1、一个简单的示例

    //文件:routes/web.php
    <?php
    Route::get('/','WelcomeController@index');
    
    //文件:app/Http/Controllers/WelcomeController.php
    <?php
    namescpace app\Http\Controllers;
    
    class WelcomeController{
        public function index(){
            return 'Hello, World!';
        }
    }
    

    访问http://xxxxxxxxx.xxx/ 就可以看见“Hello,World!”。
    实际上,这种写法等价于另一种更为简便的写法

    //文件:routes/web.php
    <?php
    Route::get('/',function(){
        return 'Hello, World!';
    });

    但是,为了保持与后面讲解内容的一致性和代码编写的一致性,最好使用第一种方法。第一种方法的第一个文件中定义了路由,当访问‘/’的路由的时候,就去找WelcomeController里面的index方法。第二个文件定义的就是WelcomeController控制器以及它的index方法。

    0.2、一个访问数据库数据的demo

    //文件:routes/web.php
    <?php
    Route::get('/',function{
        return Greeting::first()->body;
    });
    //文件:app/Greeting.php
    //这个是模型文件
    <?php
    use Illuminate\Database\Eloquent\Model;
    
    class Greeting extends Model{}
    
    //文件:database/migrations/2018_06_03_123123_create_greetings_table.php
    //这个是数据库迁移文件,后面会详细讲解
    <?php
     use Illuminate\Database\Migrations\Migration;
     use Illuminate\Database\Schema\Blueprint;
     class CreateGreetingsTable extends Migration{
         public function up(){
             Schema::create('greetings',function(Blueprint $table){
                $table->increments('id');
                $table->string('body');
                $table->timestamps();
             });
         }//创建数据库的文件,这些文件都可以使用artisan命令自动生成,内容自己填充
    
         public function down(){
             Schema::drop('greetings');
         }//销毁数据库时的操作
     }
    

    如果在greetings数据库里面存入一条数据:“Hello, World!”。就可以在首页看到了。

    下面开始正式学习laravel

    1、创建一个新的laravel项目

    1.1、使用Laravel安装工具来安装Laravel
    (1)、开发全局安装Composer
    (2)、运行

    composer global require “laravel/installer=~1.1”

    安装laravel安装工具。启动一个全向的Laravel项目:

    laravel new projectName

    此命令会在当前目录下创建一个新的名为 projectName 的子目录,并在其中安装 一个全新的Laravel项目

    1.2、使用Composer的create-project 来安装Laravel
    (1)、输入以下命令:

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

    此命令会在当前目录下创建一个新的名为 projectName 的子目录,并在其中安装 一个全新的Laravel项目

    1.3、创建好Laravel项目之后,生成的项目结构大致如下(因为版本不一样,可能稍有区别)

    新安装的 Laravel 应用包含许多文件夹:
    app目录包含了应用的核心代码;
    bootstrap目录包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能;

    config目录包含了应用所有的配置文件;

    database目录包含了数据迁移及填充文件,如果你喜欢的话还可以将其作为 SQLite 数据库存放目录;

    public目录包含了前端控制器和资源文件(图片、JavaScript、CSS等);

    resources目录包含了视图文件及原生资源文件(LESS、SASS、CoffeeScript),以及本地化文件;

    storage目录包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件,该文件夹被细分为成app、framework和logs子目录,app目录用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,最后,logs目录包含应用的日志文件;

    tests目录包含自动化测试,其中已经提供了一个开箱即用的PHPUnit示例;

    vendor目录包含Composer依赖;

    App目录

    应用的核心代码位于app目录下,默认情况下,该目录位于命名空间 App 下, 并且被 Composer 通过 PSR-4自动载入标准 自动加载。你可以通过Artisan命令app:name来修改该命名空间。

    app目录下包含多个子目录,如Console、Http、Providers等。Console和Http目录提供了进入应用核心的API,HTTP协议和CLI是和应用进行交互的两种机制,但实际上并不包含应用逻辑。换句话说,它们只是两个向应用发布命令的方式。Console目录包含了所有的Artisan命令,Http目录包含了控制器、中间件和请求等。

    Jobs目录是放置队列任务的地方,应用中的任务可以被队列化,也可以在当前请求生命周期内同步执行。

    Events目录是放置事件类的地方,事件可以用于通知应用其它部分给定的动作已经发生,并提供灵活的解耦的处理。

    Listeners目录包含事件的处理器类,处理器接收一个事件并提供对该事件发生后的响应逻辑,比如,UserRegistered事件可以被SendWelcomeEmail监听器处理。

    Exceptions目录包含应用的异常处理器,同时还是处理应用抛出的任何异常的好地方。

    注意:app目录中的很多类都可以通过Artisan命令生成,要查看所有有效的命令,可以在终端中运行php artisan list make命令。

    2、配置

    内容包括数据库连接,队列以及邮件设置都放置在config文件夹中。这里的每一个文件都将返回一个数组,数组中的每个值都可以通过一个配置键进行访问,该配置键有文件名和后续的键组成,以点好(.)进行分隔。所以,可以在config/services.php中创建如下所示的信息。

    // config/services.php
    return [
        'sparkpost' => [
            'secret' => 'aaaaaa'
        ]
    ];

    现在可以使用

    config(‘services.sparkpost.secret)

    访问配置好的变量了。

    每个环境中的任何配置变量都应该放在.env文件中(而不是提交给源代码控制)。如果希望在每个环境使用不同的Bugsnag API密钥,可以将配置信息从.env中提取出来,如下所示:

    //config/services.php
    return [
        'bugsnag' => [
            'api_key' => env('BUGSNAG_API_KEY')
        ]
    ];

    .env()这个函数可以从.env文件中提取出该键名所对应的值。现在可以将该键名对应的信息添加到.env(当前环境的设置)和.env.example(适用于所有环境的模板)文件中。

    BUGSNAG_API_KEY = oinfp9813410942

    3、路由和控制器

    在学习web框架时,定义好应用程序的路由是第一个也是最重要的一个环节。没有路由,就无法与终端用户进行交互。

    在一个laravel应用程序中,一般是在routes/web.php中定义路由。如果是api的路由,则在api.php中定义路由。示例0.1就是一个路由定义的例子。

    在详细介绍路由之前,先介绍几个概念:

    闭包:闭包是php版本的匿名函数。闭包是一个函数,可以将它作为一个对象传递,并赋值给一个变量,将其作为参数传递给其他的函数和方法,甚至进行序列化。
    中间件:laravel的请求和响应的过程包含很多封装起来的内容,包括所谓的中间件。仅仅定义路由闭包以及控制器方法,还不足以将输出发送给浏览器,所以这里采用返回内容的方式,这样返回的内筒可以继续在response stack以及中间件中运行(即继续在程序中处理该返回的内容),运行完成后再返回给浏览器共终端用户查看。

    demo3.1

    //简单的网站
    
    Route::get('/',function(){
        return view('welcome');
    });
    
    Route::get('about',function(){
        return view('about');
    });
    
    Route::get('products',function(){
        return view('products');
    });
    Route::get('services',function(){
        return view('services');
    });

    上面的代码等价于

    $router->get('/',function(){
        return view('welcome');
    });
    
    $router->get('about',function(){
        return view('about');
    });
    
    $router->get('products',function(){
        return view('products');
    });
    $router->get('services',function(){
        return view('services');
    });

    常用的HTTP方法有:GET/POST/PUT/DELETE/PATCH
    进行替换就可以了。例如:

    Route::get('/',function(){
        return '123';
    });
    
    Route::post('/',function(){
        return '456';
    });
    
    Route::put('/',function(){});
    Route::delete('/',function(){});
    Route::any('/',function(){});
    Route::match(['get','post'],'/',function(){});

    另一种方法是将控制器名称和方法作为字符串传递给闭包

    Route::get('/','WelcomeController@index');

    路由参数:如果定义的路由具有参数(可变的额URL地址段),那么可以在路由中定义它们,并将它们传递给闭包。

    //路由参数示例
    Route::get('users/{id}/friends',function(){
        //
    });

    一般只有get方法这样写参数。
    在录用参数({id})中使用相同的名称,以及将对应的名字添加到路由定义的方法参数中(function{$sid)是十分常见的。除非使用路由/模型绑定,否则定义的路由参数与哪个方法参数相匹配仅由它们的顺序(从左到右)决定,如以下代码所示。

    Route::get('users'/{userId}/comments/{commentId}',function(
        $thisIsActuallyTheRouteId,
        $thisisReallyTheCommentId
        ){
        //
    });

    也就是说,可以让它们使用不同的名称,也可以使用相同的名称。这里建议使它们的名称保持一致,以免未来开发人员在使用的时候可能因为不一致的命名而出现问题。
    还可以用过在参数名称后添加一个问号(?)来实现路由参数的选择。

    //可选路由参数
    Route::get('users/{id?}',function($id = 'fallbackId'){
        //
    });

    在这种情况下,应该为相应的路由变量设置好默认值。并且可以使用正则表达式来定义一个路由,这个时候,只有该参数满足特定的模式时才会匹配

    //通过正则表达式来定义路由
    Route::get(;users/{id}',function($id){
        //
    })->where('id','[0-9]+');
    
    Route::get('users/{username}',function($username){
        //
    })->where('username','[A-Za-z]+');
    
    Route::get('posts/{id}/{slug}',function($id,$slug){
        //
    })->where(['id'] => '[0-9]+',]slug' => '[A-Za-z]+');

    路由名称
    url()助手函数:写相对路径,可以自动补全站点全称

    //在routes/web.php中定义具有名称的路由
    Route::get('members/{id}','MembersController@show')->name('members.show');
    
    //使用route()助手在视图中链接路由
    <a href="<php echo route('members.show',['id' = 4]); ?>">

    路由组
    允许多个路由组合在一起,并且可以将任何共享的配置应用于整个组,从而避免配置信息的重复。

    //定义一个路由组
    Route::group([],function(){
        Route::get('hello',function(){
            return 'Hello';
        });
        Route::get('world',function(){
            return ' World!';
        });
    });

    传入的空数组允许传递各种配置信息,这些配置将对组内的所有路由都生效。

    中间件
    路由组最常见的功能就是将中间件应用于一组路由中,但是在其他方面,路由组也常常被应用在权限控制方面。

    //将一组路由限制为只允许登录用户访问
    Route::group(['middleware' => 'auth'],function(){
        Route::get('aaa',function(){
            return view('aaaa');
        });
        Route::get('bbb',function(){
                return view('bbbb');
        });
    });

    此时中间件auth对aaa和bbb这两者都会生效。在此示例中,表示用户必须登录后才能查看控制中心(aaa)或账户页面(bbb)。

    中间件在控制器中的应用:
    通常,在控制器中使用中间件比在路由中使用中间件更为清晰和直接。可以在控制器中调用middleware()方法来使用中间件。参数代表中间件的名称,可以使用modifier方法(only()和except())来确定将由哪些方式接收中间件

    class DashboardController extends Controller{
        public function __construct(){
            $this->middleware('auth');
            $this->middleware('admin-auth')->only('admin');
            $this->middleware('team-member')->except('admin');
        }
    }

    路径前缀

    //为一组路由设置路径前缀
    Route::group(['prefix' => 'api'],function(){
        Route::get('/',function(){
            //设置path /api
        });
    
        Route::get('users',function(){
            //设置path /api/users
        });
    });

    子域名路由
    子域名路由的作用域是子域名,而不是路由前缀

    //子域名路由
    Route::group(['domain' => 'api.myapp.com'],function(){
        Route::get('/',function(){
            //
        });
    });
    
    //参数化的子域名路由
    Route::group(['domain'=> '{acount}.myapp.com'],function(){
        Route::get('/',function($acount){
            //
        });
        Route::get('users/{id}',function($acount,$id){
            //
        });
    });
    展开全文
  • laravel 入门指南

    2019-06-13 16:20:13
    2019独角兽企业重金招聘Python工程师标准>>> ...

    参考 https://laravelacademy.org/
    本文基于laravel文档总结
    文档中有些概念解析的不是特别清楚,特此总结一下

    概念 单词

    • Facade 外观模式,门面模式;通过一个类名或函数 返回对象
    • Contract 契约合同: 可以理解为接口,面向接口编程
    • Container 容器: 存放对象的容器.
    • ServiceProvider 服务提供者: 管理(注册,调用)服务,省去了创建对象的麻烦.
    • Foundation 基础组件
    • Kernel 核心, 有$app的核心,http的核心,和其他核心类
    • Middleware 路由中间件,一些小的解决方案,比如登录权限限制,访问频率限制
    • repository (~=Model层)

    $app就是一个容器,是项目最先生成的. $app->bind() 等价于 App::bind() :自己绑定声明类的依赖关系
    $app->make() 生成对象,调用对象 boot extend 覆盖 修改驱动

    • 提示 英文单词的 动词,名词,单数,复数 不同地方用不同的单词.例如 seed和seeder

    控制反转:在一个类使用另一个类的控制权反转了,现在不用在类里面直接new类
    依赖倒置:不依赖手动new了,通过注入外部的对象,一般是通过构造方法的参数传入,多用组合少用继承
    laravel很好的解决了类的依赖关系

    路由

    路由配置在routes目录

    ## 生成资源控制器 ,命令里加上 --resoure 生成带crud方法的控制器
    php artisan make:controller PostController --resource
    #资源路由,一次性绑定资源方法 curd等
    Route::resource('post', 'PostController');
    
    #模板内使用路由命名 生成url
    <a href="{{ route('user.profile', ['id' => 100]) }}">
    #控制器里使用 路由名字生成url
    route('post.show', [$id]);
    #路由分组,组内公用中间件 比如登录校: https://laravelacademy.org/post/9612.html#toc_0
    #都进行登录验证的分组
    Route::group(['middleware' => ['auth','verified']], function () {
        Route::get('/pay/ordersubmit', 'PayController@ordersubmit')->name('pay.ordersubmit');
    });
    
    #兜底路由,
    Route::fallback(function () {
        return '没设置路由,会到这里';
    });
    #频率限制 利用内置的throttle中间件实现
    Route::middleware('throttle:60,1')->group(function () {
        Route::get('/user', function () {
            //
        });
    });
    
    

    视图

    #在视图间共享变量
    我们可以在某个服务提供者如 AppServiceProvider 的 boot 方法中定义共享的视图变量:
    view()->share('siteName', 'Laravel学院');
    view()->share('siteUrl', 'https://laravelacademy.org'); 
    #通过数组指定多个视图组件
    view()->composer(['partials.header', 'partials.footer'], function ($view) { 
        $view->with('posts', Post::recent()); 
    });
    视图
    变量自动htmlentities转义防止xss ,如果不想自动转义用{!! $variable !!},例如富文本编辑器的代码;
    #注释
    {{-- 注释内容 --}}
    
    

    npm和前端编译

    npm install 安装 前端库
    package.json 可类比为前端的 composer.json,我们通过 npm install 安装该文件中定义的依赖
    运行 npm run dev 编译前端资源
    大多数时候我们需要在 resources/js/app.js 和 resources/sass/app.scss 中编写代码,引入其它模块,然后运行 npm run dev 就可以了

    框架重点

    读一遍框架自带的服务提供者源码可以帮助你熟悉各种类是怎么绑定进容器的,都绑定到哪些键上。这是学习 Laravel 框架底层究竟如何运转的最佳实践。

    开发

    config
    根目录.env session驱动设置,如果使用php的redis扩展客户端请设置为phpredis,否则默认使用predis包.

    artisan 命令行工具 好多功能

    php artisan up
    php artisan down

    测试 分为 单元测试和功能测试

    #执行测试
    vendor/bin/phpunit
    #运行单个测试用例
    vendor/bin/phpunit --filter=UserTest
    

    路由中间件

    内置了 表单csrf,表单token auth模块中: guest中间件是游客判断(未登录用户)
    auth是登录的用户判断
    如果构造方法中调用中间件,可以用except() 排除哪些方法不验证.
    可以自定义中间件

    #该命令会在 app/Http/Middleware 目录下创建一个新的CheckAge 类
    php artisan make:middleware CheckAge  
    

    常见契约 Contracts

    验证email, user包含 email_verified_at 字段
    

    常见方法

    only() , except(), all(), has(), exists(),
    $request->input() 智能读取变量 支持json(需要header头设置application/json)

    Artisan 命令

    #生成可调用的控制器
    php artisan make:controller ShowProfile --invokable
    #生成资源控制器 --resource参数自带curd方法的自动生成
    php artisan make:controller PhotoController --resource
    #创建模型  加上-m参数顺便创建迁移文件
    php artisan make:model -m Models/Post
    #模型工厂文件
    php artisan make:factory PostFactory --model=Models/Post
    
    #Schema 建立表
    php artisan session:table
    
    #执行数据迁移
    php artisan migrate
    #全部down,再次up,填充数据
    php artisan migrate:refresh --seed
    #回滚最后一批迁移
    php artisan migrate:rollback
    #回滚所有迁移,down方法
    php artisan migrate:reset
    
    #删除所有表 重建数据库(破坏性,如果有自己手动录入的表数据请不要执行此操作)
    php artisan migrate:fresh
    #删除所有表 重建数据库 并填充数据
    php artisan migrate:fresh --seed
    
    #生成数据迁移文件 创建新闻表
    php artisan make:migration create_news_table --create news
    #复杂表单验证 建立类去处理
    php artisan make:request StoreBlogPost
    #创建auth所需视图和控制器
    php artisan make:auth
    命令来生成密钥
    php artisan key:generate 
    
    
    

    数据填充

    #创建填充类对象
    php artisan make:seeder PostsTableSeeder
    
    运行填充器
    编写好填充器类之后,需要通过 dump-autoload 命令重新生成 Composer 的自动加载器:
    
    composer dump-autoload
    运行之后可以使用 Artisan 命令 db:seed 来填充数据库。
    默认情况下,db:seed 命令运行 DatabaseSeeder 类,
    不过,你也可以使用 --class 选项来指定你想要运行的独立的填充器类:
    
    php artisan db:seed
    php artisan db:seed --class=UsersTableSeeder
    
    你还可以使用 migrate:refresh 命令来填充数据库,该命令还可以回滚并重新运行所有迁移,这在需要完全重建数据库时很有用:
    php artisan migrate:refresh --seed
    
    #填充中文数据
    $faker = Faker\Factory::create('zh_CN'); 
    或者修改配置config/app.php    'faker_locale' => 'zh_CN',
    Factory 只是生成了测试数据,但是插入还要 用模型和DB类去写;
    

    数据库操作

    DB:: 外观类操作数据库 查询构建器
    where whereIn whereBetween orderBy first

    模型 Eloquent ORM

    生成模型文件,带上 -m 可以创建数据迁移文件
    php artisan make:model Flight -m
    Eloquent ORM 每个表对应一个类
    模型有些默认规则,如果与规则不符,需要重新指定 如表名,主键名,时间戳,连接的库,

    注:由于 Eloquent 模型本质上就是查询构建器,你可以在 Eloquent 查询中使用查询构建器的所有方法。

    新增数据

    1.save
    $post = new Post;
    $post->title = 'test 4';
    $post->save()
    2.
    create方法可以传数组保存数据,
    但是需要设置设置$fillable属性或者$guarded属性允许批量赋值的字段  
    3. firstOrCreate  firstOrNew 
    
    

    修改数据

    $post = Post::find(1);
    $post->title = 'test 1 title';
    $post->save();
    

    关联查询 方便快速的查询其他表

    hasOne/belongsTo
    hasMany/belongsTo
    belongsToMany

    组块结果集chunk 游标cursor 根据主键获取记录find $flight = App\Flight::find(1);//可以传数组查多条 获取单条记录first $flight = App\Flight::where('active', 1)->first(); 如果无结果跑出异常findOrFail 和 firstOrFail

    fillable guarded 二选一 赋值权限设置 在数组内的字段才能赋值 setXxxxAttribate() 对字段 数据处理 Carbon 时间库使用 显示人性化语言比如:1周前 $post=Post::where('a','<','1')->latest()->paginate(10);//倒序,分页

    表单验证

    简单验证:
    $request->validate([
        'title' => 'require'
    ]);
    
    make:reuqest  自定义验证文件
    
    删除数据: 表单提交到 资源路由的删除路由别名里 {{route('posts.destroy',$post->id)}}
    可以用artisan命令查看路由列表.
    

    调试

    dd() 函数打印变量
    composer dump-autoload

    测试

    部署后不对

    # 清理
    php artisan migrate
    php artisan route:clear
    php artisan cache:clear
    php artisan config:clear
    #
    php artisan migrate
    

    问题:

    • 新安装的程序,执行数据迁移 就mysql报错
      laravel 数据迁移文件没有指定varchar字符串长度,这是laravel官网推荐的,不必指定长度.
      老版本低于5.7的mysql 必须设置最大字符长度
      要配置自动指定长度 在Providers/AppServiceProvider 的boot方法内 加上下面的代码.这样你不指定长度,框架也会自动给加上默认长度191.
     Schema::defaultStringLength(191);
    //Schema是数据迁移用的类
    
    
    • 安装扩展 数据库报错 清除配置缓存试试 php artisan config:clear
    • 提示找不到类:
      被提示的类中有语法错误,就会提示找不到

    laravel获取不到session

    • dd(), die() 等终止函数导致不会写入session;
    • 普通web网页要启用 web中间件才行 开启seesion;
    • session自动开启服务配置
    • 在登录操作的 后面执行了dump也会导致不能保存seesion登录状态;

    cookie 为空,不生成

    路由没有在web中间件下

    登录一次session id变化一次

    框架的机制 为了安全

    常见namespace

    use Illuminate\Support\Facades\Auth;//Auth外观
    

    低级错误

    用户名写错了 报错root@localhost
    getConnectionName() 自己写的模型类 没继承Model

    缓存使用

    $value = Cache::remember('users', $seconds, function () {
        return DB::table('users')->get();
    });
    

    模板

    {{ route('register') }}
    
    {{ url('/home') }}
    
    @if (session('status'))
    @endif
    
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <script src="{{ asset('js/app.js') }}" defer></script>
    @csrf
    @guest @else @endguest
    @if (Route::has('register')) @endif
    @yield('content')
    语言包{{ __('Logout') }}
    

    laravel设置 cookie

    Cookie::queue('a', 'aaaa', 1440);
    //这样就行了;
    //注意cookie是默认加密存储,你看到的值是加密后的;
    

    转载于:https://my.oschina.net/yiupng/blog/3022765

    展开全文
  • 刚开始学习lavarel框架时,我也不知道从何入手,首先就从文件目录开始,找到项目入口文件,然后进行配置运行。注意:在配置运行时,要注意PHP的版本是否符合要求以及下列扩展是否开启,否则运行不能成功:...可...
  • Laravel快速入门

    千次阅读 2019-01-30 20:33:04
    文章目录Laravel 入门30分安装服务器要求安装Laravel通过 Laravel 安装器通过 Composer 创建项目本地开发服务器基础知识路由控制器创建一个控制器路由关联控制器视图模型操作数据DB facade CURD查询构造器框架开发 ...
  • Laravel入门

    万次阅读 2017-03-28 08:47:36
    一、laravel简介及安装 1.简介:Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力...
  • Laravel教程

    千次阅读 2018-01-20 09:28:58
    Laravel 5 系列入门教程 Laravel 5.4 入门系列 Laravel 文档阅读 laravel源码解析
  • PHP Laravel入门+进阶+全栈视频教程 PHP Laravel入门+进阶+全栈视频教程 PHP Laravel入门+进阶+全栈视频教程 下载地址:百度网盘
  • Laravel入门教程(一)

    千次阅读 2017-11-23 09:52:03
    1. Laravel简介及学习目录PHP框架。1.1. 什么是框架为解决一定问题按照...1.2. Laravel前提条件 熟悉PHP语言 面对对象 命名空间 Traits等 熟悉MySQL 1.3. 选择版本 master 5.2.x 5.1.xLTS与非LTS(Long Time Support)
  • Laravel学习笔记目录

    千次阅读 2015-11-28 15:05:38
    伴随自己学习、使用laravel的过程,记录下遇到过的问题与思考。与程序猿们共勉,知识的道路没有止境,我们一直都在学习的路上。第一部分:入门级 这部分文章写得都是比较浅显的,属于纯粹的使用,我也不知道自己...
  • Laravel 实战视频教程(精品)

    万次阅读 多人点赞 2017-07-11 17:36:02
    Laravel强大之处不仅仅在于它给你提供了一系列脚手架,比如超级好用的ORM,基于Carbon的时间处理,以及文件存储等等功能。更是因为它的设计,思想及可扩展性。所以在国外Laravel俨然已经成为最流行的PHP框架。然而为...
  • Laravel 精选资源大全

    千次阅读 2017-10-12 15:53:09
    必备品 文档:Documentation ...Laravel学院– Laravel 5.1 中文文档 Laravel中文网– 由PHPHub站长驱动 Laravel中文网– 由Bootstrap中文网站长驱动 Laravel台湾– Laravel文档繁体中文版 Laravel 5
  • Laravel和thinkphp的区别/优缺点

    千次阅读 2019-01-07 13:33:47
    Laravel的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD和BDD,作为使用者最多的php框架,它为你准备好了一切,composer是个php的未来。laravel最大的特点和处优秀之就是集合了php比较新的特性,以及各种...
  • laravel+vue2.0终于搞定了!

    万次阅读 2017-08-26 16:18:45
    1:起手在慕课网看了laravel基础入门的就会发现,laravel解决了很多后台开发起来老大难的问题,模板引擎和路由机制还有很多开发服务:登录/注册验证,验证码,分页等等.. 2:起手也在慕课网看了vue基础也有很多先进的概念如...
  • Laravel教程:laravel 4安装及入门

    千次阅读 2014-07-27 21:18:47
    一.安装Composer 首先你需要安装Composer,Composer是PHP依赖管理工具,Laravel框架就是使用 Composer 执行安装和依赖管理。  注: (1)若安装Composer出错,在php.ini中开启php_openssl,...安装Laravel Comp
  • laravel-admin基本使用

    千次阅读 2019-04-21 09:44:38
    之前利用laravel-admin直接上手写了一个小项目,但是虽说,larave的框架都还没学,但是看看文档,百度百度,慢慢理解吧,今天就抽空这里就写一下,如何用这个去做实现后台简单功能。 【1】配置数据库 本地新建一...
  • 1. 在packagist.org 上 查询 laravel 的相关信息 网址: https://packagist.org/ 2. 通过 控制台创建项目 使用 : composer create-project 包名 项目名称 我们通过第一步 : 发现 包名是 laravel/...
  • laravel开发入门教程

    2018-12-11 10:08:30
    1、https://github.com/johnlui/Learn-Laravel-5/issues/16 入门开发 2、https://cs.laravel-china.org/ laravel 速查 3、https://www.tutorialspoint.com/laravel/ laravel 最新简单入门学习 4、...
  • Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接: 推荐给你高品质的实战课程 https://laravel-china.org/courses?rf=15818    文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎...
1 2 3 4 5 ... 20
收藏数 3,173
精华内容 1,269
关键字:

laravel入门