目录

Laravel - 快速指南

Laravel - Overview

介绍 (Introduction)

Laravel是一个开源PHP框架,功能强大且易于理解。 它遵循模型 - 视图 - 控制器设计模式。 Laravel重用了不同框架的现有组件,这有助于创建Web应用程序。 这样设计的Web应用程序更加结构化和实用。

Laravel提供了丰富的功能,其中包含PHP框架的基本功能,如CodeIgniter,Yii和其他编程语言,如Ruby on Rails。 Laravel具有非常丰富的功能,可以提高Web开发的速度。

如果您熟悉Core PHP和Advanced PHP,Laravel将使您的任务更容易。 如果您计划从头开发网站,可以节省大量时间。 此外,Laravel内置的网站是安全的,可以防止多次网络攻击。

Laravel的优点

当您基于它设计Web应用程序时,Laravel为您提供以下优势 -

  • 由于Laravel框架,Web应用程序变得更具可扩展性。

  • 在设计Web应用程序时节省了大量时间,因为Laravel在开发Web应用程序时重用了其他框架中的组件。

  • 它包括名称空间和接口,因此有助于组织和管理资源。

Composer

Composer是一个包含所有依赖项和库的工具。 它允许用户创建与所提到的框架相关的项目(例如,Laravel安装中使用的项目)。 借助作曲家可以轻松安装第三方库。

所有依赖项都在composer.json文件中记录,该文件放在源文件夹中。

Artisan

Laravel中使用的命令行界面称为Artisan 。 它包括一组有助于构建Web应用程序的命令。 这些命令包含在Symphony框架中,从而在Laravel 5.1(Laravel的最新版本)中生成附加功能。

Laravel的特点

Laravel提供以下主要功能,使其成为设计Web应用程序的理想选择 -

模块化(Modularity)

Laravel提供20个内置库和模块,有助于增强应用程序。 每个模块都与Composer依赖关系管理器集成,可以简化更新。

可测性(Testability)

Laravel包含功能和帮助程序,有助于测试各种测试用例。 此功能有助于根据要求维护代码。

Routing

Laravel为用户提供了一种灵活的方法来定义Web应用程序中的路由。 路由有助于以更好的方式扩展应用程序并提高其性能。

配置管理

在Laravel中设计的Web应用程序将在不同的环境中运行,这意味着其配置将不断变化。 Laravel提供了一种以高效方式处理配置的一致方法。

查询生成器和ORM

Laravel包含一个查询构建器,可帮助使用各种简单的链式方法查询数据库。 它提供了名为Eloquent的ORM (对象关系映射器)和ActiveRecord实现。

架构生成器

Schema Builder在PHP代码中维护数据库定义和模式。 它还保持跟踪数据库迁移的变化。

模板引擎

Laravel使用Blade Template引擎,这是一种轻量级模板语言,用于设计具有包含动态内容的预定义块的分层块和布局。

E-mail

Laravel包含一个mail类,可帮助从Web应用程序发送包含丰富内容和附件的邮件。

身份验证 (Authentication)

用户身份验证是Web应用程序中的常见功能。 Laravel简化了设计身份验证,因为它包含register, forgot passwordsend password reminders

Redis

Laravel使用Redis连接到现有会话和通用缓存。 Redis直接与会话交互。

Queues

Laravel包括队列服务,如通过电子邮件发送大量用户或指定的Cron作业。 这些队列有助于以更轻松的方式完成任务,而无需等待先前的任务完成。

Event and Command Bus

Laravel 5.1包括Command Bus ,它以简单的方式帮助执行命令和调度事件。 Laravel中的命令根据应用程序的生命周期进行操作。

Laravel - Installation

为了管理依赖关系,Laravel使用composer 。 在安装Laravel之前,请确保在系统上安装了Composer。 在本章中,您将看到Laravel的安装过程。 您必须按照以下步骤将Laravel安装到您的系统上 -

Step 1 - 访问以下URL并下载composer以将其安装在您的系统上。

https://getcomposer.org/download/

Step 2 - 安装Composer后,通过在命令提示符中键入Composer命令来检查安装,如以下屏幕截图所示。

作曲家

Step 3 - 在系统中的任何位置为新的Laravel项目创建一个新目录。 之后,转到创建新目录的路径,并在那里键入以下命令以安装Laravel。

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

Step 4 - 上面的命令将在当前目录中安装Laravel。 执行以下命令启动Laravel服务。

php artisan serve

Step 5 - 执行上述命令后,您将看到如下所示的屏幕 -

管理员

Step 6 - 在上面的屏幕截图中复制带灰色下划线的URL,并在浏览器中打开该URL。 如果您看到以下屏幕,则表示已成功安装Laravel。

Laravel已安装

Laravel - Application Structure

Laravel中的应用程序结构基本上是项目中包含的文件夹,子文件夹和文件的结构。 一旦我们在Laravel中创建了一个项目,我们就可以看到应用程序结构的概述,如图所示。

这里显示的快照是指Laravel的根文件夹,即laravel-project 。 它包括各种子文件夹和文件。 文件夹和文件的分析及其功能方面如下 -

根目录

App

它是应用程序文件夹,包含项目的完整源代码。 它包含事件,异常和中间件声明。 app文件夹包含各种子文件夹,如下所述 -

Console

控制台包含Laravel所需的工匠命令。 它包含一个名为Commands的目录,其中所有命令都使用适当的签名声明。 文件Kernal.php调用Kernal.php声明的命令。

安慰

如果我们需要在Laravel中调用特定命令,那么我们应该在此目录中进行适当的更改。

事件 (Events)

此文件夹包含项目的所有事件。

活动

事件用于触发活动,引发错误或必要的验证,并提供更大的灵活性。 Laravel将所有事件保存在一个目录中。 包含的默认文件是event.php ,其中声明了所有基本事件。

Exceptions

此文件夹包含处理异常所需的所有方法。 它还包含处理所有异常的文件handle.php

Http

Http文件夹包含控制器,中间件和应用程序请求的子文件夹。 当Laravel遵循MVC设计模式时,此文件夹包括为特定目录定义的模型,控制器和视图。

Middleware子文件夹包括中间件机制,包括过滤机制以及响应和请求之间的通信。

Requests子文件夹包含应用程序的所有请求。

Jobs

Jobs目录维护排队等待Laravel应用程序的活动。 基类在所有作业之间共享,并提供了一个中心位置,可以将它们放在一个屋檐下。

听众(Listeners)

监听器依赖于事件,它们包括用于处理事件和异常的方法。 例如,声明的login事件包括LoginListener事件。

Policies

策略是包含授权逻辑的PHP类。 Laravel包含一个在该子文件夹内的策略类中创建所有授权逻辑的功能。

提供商(Providers)

此文件夹包括为核心服务器注册事件和配置Laravel应用程序所需的所有服务提供商。

Bootstrap

该文件夹包含所有应用程序引导脚本。 它包含一个子文件夹,即缓存,其中包含与缓存Web应用程序相关的所有文件。 您还可以找到文件app.php ,它初始化bootstrap所需的脚本。

Config

config文件夹包含Laravel应用程序平稳运行所需的各种配置和相关参数。 配置文件夹中包含的各种文件如下图所示。 文件名根据与其关联的功能工作。

配置文件夹

数据库 (Database)

顾名思义,此目录包含数据库功能的各种参数。 它包括三个子目录,如下所示 -

  • Seeds - 包含用于单元测试数据库的类。

  • Migrations - 此文件夹有助于查询迁移Web应用程序中使用的数据库。

  • Factories - 此文件夹用于生成大量数据记录。

Public

它是有助于初始化Laravel应用程序的根文件夹。 它包括以下文件和文件夹 -

  • .htaccess - 此文件提供服务器配置。

  • javascript and css - 这些文件被视为资产。

  • index.php - 此文件是Web应用程序初始化所必需的。

资源(Resources)

资源目录包含增强Web应用程序的文件。 此目录中包含的子文件夹及其用途说明如下 -

  • assets - assets文件夹包括样式化Web应用程序所需的文件,如LESS和SCSS。

  • lang - 此文件夹包含本地化或内部化的配置。

  • views - 视图是与最终用户交互并在MVC架构中发挥主要作用的HTML文件或模板。

Storage

这是存储Laravel项目运行时经常需要的所有日志和必要文件的文件夹。 此目录中包含的子文件夹及其用途如下 -

  • app - 此文件夹包含连续调用的文件。

  • framework - 它包含频繁调用的会话,缓存和视图。

  • Logs - 在此子文件夹中跟踪所有异常和错误日志。

Tests

所有单元测试用例都包含在此目录中。 命名测试用例类的命名约定是camel_case并根据类的功能遵循约定。

Vendor

Laravel完全基于Composer依赖项,例如安装Laravel安装程序或包含第三方库等.Phowor文件夹包含所有编写器依赖项。

除了上面提到的文件之外,Laravel还包括一些其他文件,这些文件在各种功能中起主要作用,例如GitHub配置,包和第三方库。

申请结构中包含的文件如下所示 -

档

Laravel - Configuration

在上一章中,我们已经看到Laravel的基本配置文件包含在config目录中。 在本章中,我们将讨论配置中包含的类别。

环境配置

环境变量是为Web应用程序提供Web服务列表的变量。 所有环境变量都在.env文件中声明,其中包含初始化配置所需的参数。

默认情况下, .env文件包含以下参数 -

APP_ENV = local
APP_DEBUG = true
APP_KEY = base64:ZPt2wmKE/X4eEhrzJU6XX4R93rCwYG8E2f8QUA7kGK8 =
APP_URL = http://localhost
DB_CONNECTION = mysql
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_DATABASE = homestead
DB_USERNAME = homestead
DB_PASSWORD = secret
CACHE_DRIVER = file
SESSION_DRIVER = file
QUEUE_DRIVER = sync
REDIS_HOST = 127.0.0.1
REDIS_PASSWORD = null
REDIS_PORT = 6379
MAIL_DRIVER = smtp
MAIL_HOST = mailtrap.ioMAIL_PORT = 2525
MAIL_USERNAME = null
MAIL_PASSWORD = null
MAIL_ENCRYPTION = null

重点

在使用Laravel的基本配置文件时,需要注意以下几点 -

  • 不应将.env文件提交到应用程序源控件,因为每个开发人员或用户都具有Web应用程序的一些预定义环境配置。

  • 对于备份选项,开发团队应包含.env.example文件,该文件应包含默认配置。

检索环境变量

.env文件中声明的所有环境变量都可以通过env-helper函数访问,这些函数将调用相应的参数。 每当应用程序从用户端收到请求时,这些变量也会列在$_ENV全局变量中。 您可以访问环境变量,如下所示 -

'env' => env('APP_ENV', 'production'),

env-helper函数在config文件夹中包含的app.php文件中调用。 上面给出的示例是调用基本的本地参数。

访问配置值

您可以使用global config helper函数轻松访问应用程序中任何位置的配置值。 如果未初始化配置值,则返回默认值。

例如,要设置默认时区,请使用以下代码 -

config(['app.timezone' => 'Asia/Kolkata']);

缓存配置

要提高性能并增强Web应用程序,请务必缓存所有配置值。 用于缓存配置值的命令是 -

config:cache

以下屏幕截图显示了系统方法中的缓存 -

配置缓存

维护模式

有时您可能需要更新某些配置值或在您的网站上执行维护。 在这种情况下,将其保持在维护模式,使您更容易。 这些保持维护模式的Web应用程序抛出异常,即MaintenanceModeException状态代码为503的MaintenanceModeException

您可以使用以下命令在Laravel Web应用程序上启用维护模式 -

php artisan down

PHP Artisian Down

以下屏幕截图显示了Web应用程序关闭时的外观 -

启动维护模式

完成更新和其他维护后,可以使用以下命令禁用Web应用程序上的维护模式 -

php artisan up

开始维护

现在,您可以发现该网站显示输出功能正常并描述现在已删除维护模式,如下所示 -

Laravel已安装

Laravel - Routing

在Laravel中,所有请求都在路由的帮助下进行映射。 基本路由将请求路由到关联的控制器。 本章讨论Laravel中的路由。

Laravel中的路由包括以下类别 -

  • 基本路由
  • 路线参数
  • Named Routes

基本路由

所有应用程序路由都在app/routes.php文件中注册。 该文件告诉Laravel它应该响应的URI,并且相关的控制器将给它一个特定的调用。 欢迎页面的示例路由可以在下面给出的屏幕截图中看到 -

路线

Route::get ('/', function () {
   return view('welcome');});

例子 (Example)

请观察以下示例以了解有关路由的更多信息 -

app/Http/routes.php

<?php
Route::get('/', function () {
   return view('welcome');
});

resources/view/welcome.blade.php

<!DOCTYPE html>
<html>
   <head>
      <title>Laravel</title>
      <link href = "https://fonts.googleapis.com/css?family=Lato:100" rel = "stylesheet" 
         type = "text/css">
      <style>
         html, body {
            height: 100%;
         }
         body {
            margin: 0;
            padding: 0;
            width: 100%;
            display: table;
            font-weight: 100;
            font-family: 'Lato';
         }
         .container {
            text-align: center;
            display: table-cell;
            vertical-align: middle;
         }
         .content {
            text-align: center;
            display: inline-block;
         }
         .title {
            font-size: 96px;
         }
      </style>
   </head>
   <body>
      <div class = "container">
         <div class = "content">
            <div class = "title">Laravel 5.1</div>
         </div>
      </div>
   </body>
</html>

路由机制如下图所示 -

路由机制

现在让我们详细了解路由机制中涉及的步骤 -

Step 1 - 最初,我们应该执行应用程序的根URL。

Step 2 - 现在,执行的URL应该与route.php文件中的相应方法匹配。 在本例中,它应该与方法和根('/')URL匹配。 这将执行相关功能。

Step 3 - 该函数调用模板文件resources/views/welcome.blade.php. 接下来,该函数使用参数'welcome'调用view()函数,而不使用blade.php 。 这将产生HTML输出,如下图所示 -

Laravel5

路线参数

通常在应用程序中,我们打算捕获通过URL传递的参数。 为此,我们需要相应地修改routes.php文件中的代码。 我们可以通过两种方式捕获通过URL传递的参数。

您可以通过以下两种方式捕获routes.php文件中的参数 -

必需参数

这些参数是为了路由Web应用程序而应强制捕获的参数。 例如,从URL捕获用户的标识号很重要。 这可以通过定义路由参数来实现,如下所示 -

Route::get('ID/{id}',function($id){
   echo 'ID: '.$id;
});

可选参数

有时开发人员可以生成参数作为可选参数,并且可以包含? 在URL中的参数名称之后。 将提到的默认值保持为参数名称非常重要。 请看以下示例,其中显示了如何定义可选参数 -

Route::get('user/{name?}', function ($name = '<b class="notranslate">IoWiki</b>') { return $name;});

上面的示例检查值是否与IoWiki匹配,并相应地路由到定义的URL。

命名路由

命名路由允许以方便的方式创建路由。 可以使用name方法在路由定义上指定路由的链接。 以下代码显示了使用控制器创建命名路由的示例 -

Route::get('user/profile', 'UserController@showProfile')->name('profile');

用户控制器将使用参数作为profile调用showProfile函数。 参数使用name方法到路由定义。

Laravel - Middleware

中间件充当请求和响应之间的桥梁。 它是一种过滤机制。 本章将向您介绍Laravel中的中间件机制。

Laravel包含一个中间件,用于验证应用程序的用户是否经过身份验证。 如果用户已通过身份验证,则会重定向到主页,否则会重定向到登录页面。

可以通过执行以下命令来创建中间件 -

php artisan make:middleware <middleware-name>

《middleware-name》替换为《middleware-name》 。 您创建的中间件可以在app/Http/Middleware目录中看到。

例子 (Example)

请注意以下示例以了解中间件机制 -

Step 1 - 现在让我们创建AgeMiddleware。 要创建它,我们需要执行以下命令 -

php artisan make:middleware AgeMiddleware

Step 2 - 成功执行命令后,您将收到以下输出 -

AgeMiddleware

Step 3 - 将在app/Http/Middleware创建AgeMiddleware 。 新创建的文件将为您创建以下代码。

<?php
namespace App\Http\Middleware;
use Closure;
class AgeMiddleware {
   public function handle($request, Closure $next) {
      return $next($request);
   }
}

注册中间件

我们需要在使用它之前注册每个中间件。 Laravel中有两种类型的中间件。

  • Global Middleware
  • 路由中间件

Global Middleware将在应用程序的每个HTTP请求上运行,而Route Middleware将分配给特定路由。 中间件可以在app/Http/Kernel.php. 此文件包含两个属性$middleware$routeMiddleware$middleware属性用于注册Global Middleware, $routeMiddleware属性用于注册路由特定的中间件。

要注册全局中间件,请在$ middleware属性的末尾列出该类。

protected $middleware = [
   \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
   \App\Http\Middleware\EncryptCookies::class,
   \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
   \Illuminate\Session\Middleware\StartSession::class,
   \Illuminate\View\Middleware\ShareErrorsFromSession::class,
   \App\Http\Middleware\VerifyCsrfToken::class,
];

要注册特定于路由的中间件,请将键和值添加到$ routeMiddleware属性。

protected $routeMiddleware = [
   'auth' => \App\Http\Middleware\Authenticate::class,
   'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
   'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

例子 (Example)

我们在前面的例子中创建了AgeMiddleware 。 我们现在可以在特定于路由的中间件属性中注册它。 该注册的代码如下所示。

以下是app/Http/Kernel.php的代码 -

<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
   protected $middleware = [
      \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
      \App\Http\Middleware\EncryptCookies::class,
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
      \Illuminate\Session\Middleware\StartSession::class,
      \Illuminate\View\Middleware\ShareErrorsFromSession::class,
      \App\Http\Middleware\VerifyCsrfToken::class,
   ];
   protected $routeMiddleware = [
      'auth' => \App\Http\Middleware\Authenticate::class,
      'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
      'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
      'Age' => \App\Http\Middleware\AgeMiddleware::class,
   ];
}

中间件参数

我们还可以使用中间件传递参数。 例如,如果您的应用程序具有不同的角色,如用户,管理员,超级管理员等,并且您希望基于角色对操作进行身份验证,则可以通过使用中间件传递参数来实现。 我们创建的中间件包含以下函数,我们可以在$next参数之后传递自定义参数。

public function handle($request, Closure $next) {
   return $next($request);
}

例子 (Example)

Step 1 - 执行以下命令创建RoleMiddleware -

php artisan make:middleware RoleMiddleware

Step 2 - 成功执行后,您将收到以下输出 -

中间件参数

Step 3 - 在新创建的RoleMiddlewareat app/Http/Middleware/RoleMiddleware.php.的handle方法中添加以下代码app/Http/Middleware/RoleMiddleware.php.

<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

Step 4 - 在app\Http\Kernel.php文件中注册app\Http\Kernel.php 。 在该文件中添加以灰色突出显示的行以注册RoleMiddleware。

RoleMiddleware

Step 5 - 执行以下命令以创建TestController -

php artisan make:controller TestController --plain

Step 6 - 成功执行上述步骤后,您将收到以下输出 -

的TestController

Step 7 - 将以下代码行复制到app/Http/TestController.php文件中。

app/Http/TestController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
   public function index(){
      echo "<br>Test Controller.";
   }
}

Step 8 - 在app/Http/routes.php文件中添加以下代码行。

app/Http/routes.php

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

Step 9 - 访问以下URL以使用参数测试中间件

http://localhost:8000/role

Step 10 - 输出将如下图所示。

角色编辑器

可终止的中间件

响应发送到浏览器后,可终止的中间件执行某些任务。 这可以通过在中间件中创建具有terminate方法的中间件来实现。 可终止的中间件应该在全局中间件中注册。 terminate方法将接收两个参数$request$response. 可以创建Terminate方法,如以下代码所示。

例子 (Example)

Step 1 - 通过执行以下命令创建TerminateMiddleware

php artisan make:middleware TerminateMiddleware

Step 2 - 上述步骤将产生以下输出 -

可终止的中间件

Step 3 - 在app/Http/Middleware/TerminateMiddleware.php.新创建的TerminateMiddleware中复制以下代码app/Http/Middleware/TerminateMiddleware.php.

<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   public function terminate($request, $response){
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

Step 4 - 在app\Http\Kernel.php文件中注册TerminateMiddleware 。 在该文件中添加以灰色突出显示的行以注册TerminateMiddleware。

TerminateMiddleware

Step 5 - 执行以下命令以创建ABCController

php artisan make:controller ABCController --plain

Step 6 - 成功执行URL后,您将收到以下输出 -

ABCController

Step 7 - 将以下代码复制到app/Http/ABCController.php文件。

app/Http/ABCController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ABCController extends Controller {
   public function index(){
      echo "<br>ABC Controller.";
   }
}

Step 8 - 在app/Http/routes.php文件中添加以下代码行。

app/Http/routes.php

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'ABCController@index',
]);

Step 9 - 访问以下URL以测试可终结中间件。

http://localhost:8000/terminate

Step 10 - 输出将如下图所示。

ABC控制器

Laravel - Namespaces

命名空间用于各种编程语言,以创建一组独立的变量,函数和类。 程序可能包含各种功能,这可能会导致与现有功能发生冲突。 命名空间在避免此类冲突方面发挥着关键作用。 本章将详细介绍命名空间及其在Laravel中的用法。

命名空间声明

命名空间可以定义为一个元素类,其中每个元素都具有该关联类的唯一名称。 它可以与其他类中的元素共享。

您可以声明一个命名空间,如下面给出的语法所示 -

use <namespace-name>;

请注意, use关键字允许开发人员缩短命名空间。 Laravel中使用的默认命名空间是app ,但是用户可以更改命名空间以与Web应用程序匹配。

您可以使用artisan命令创建用户定义的命名空间,如下所示 -

php artisan app:name IoWiki

在给出上述命令后,您可以观察输出,如下面的屏幕截图所示 -

选择Git

创建的命名空间可以包括可以在控制器和各种类中使用的各种功能。 在控制器和内核中使用命名空间创建的代码,包括app/console/kernel.phpapp/Http/controller.php ,如下所示 -

Kernel.php

<?php
namespace IoWiki\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel{
   /**
      * The Artisan commands provided by your application.
      *
      * @var array
   */
   protected $commands = [
    //
   ];
   /**
      * Define the application's command schedule.
      *
      * @param \Illuminate\Console\Scheduling\Schedule $schedule
      * @return void
   */
   protected function schedule(Schedule $schedule){
      // $schedule->command('inspire')
      // ->hourly();
   }
   /**
      * Register the Closure based commands for the application.
      *
      * @return void
   */
   protected function commands(){
      require base_path('routes/console.php');
   }
}

请注意,调度和命令等功能有助于调度Cron作业和其他功能的方法。

Controller.php

<?php
namespace IoWiki\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController{
   use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

控制器充当模型和视图之间的中介。 对于我们创建的名为IoWiki的命名空间,它们将用于控制器controller.php核心文件中。 使用Http\Controllers正确初始化命名空间。

创建的命名空间使用各种其他命名空间,如上面代码中提到的AuthorizesRequests, DispatchesJobsValidatesRequests

使用关键字

命名空间发生在当前类的位置。 如我们的示例中所述,我们已将IoWiki声明为我们的命名空间,它位于app文件夹中。 声明的名称空间将是App\Tutorialpoint 。 只要您想使用该类,就应该使用use关键字。

使用use关键字的语法如下所示 -

use IoWiki\Http\Controllers\Controller;

Laravel - Controllers

在MVC框架中,字母“C”代表Controller。 它充当视图和模型之间的引导流量。 在本章中,您将了解Laravel中的控制器。

创建一个控制器

根据您使用的操作系统打开命令提示符或终端,然后键入以下命令以使用Artisan CLI(命令行界面)创建控制器。

php artisan make:controller <controller-name> --plain

替换为控制器的名称。 这将创建一个普通的构造函数,因为我们传递参数 - plain 。 如果您不想创建普通构造函数,则可以忽略该参数。 可以在app/Http/Controllers看到创建的构造函数。

您将看到已经为您完成了一些基本编码,您可以添加自定义编码。 可以通过以下语法从routes.php调用创建的控制器。

语法 (Syntax)

Route::get(‘base URI’,’controller@method’);

例子 (Example)

Step 1 - 执行以下命令以创建UserController

php artisan make:controller UserController --plain

Step 2 - 成功执行后,您将收到以下输出。

UserController的

Step 3 - 您可以在app/Http/Controller/UserController.php上看到已创建的控制器,其中已经为您编写了一些基本编码,您可以根据需要添加自己的编码。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
   //
}

控制器中间件

我们以前见过中间件,它也可以和控制器一起使用。 中间件也可以分配给控制器的路由或控制器的构造函数。 您可以使用中间件方法将中间件分配给控制器。 已注册的中间件也可以限制为控制器的某些方法。

将中间件分配给路由

Route::get('profile', [
   'middleware' => 'auth',
   'uses' => 'UserController@showProfile'
]);

这里我们将在配置文件路由中将auth中间件分配给UserController。

在Controller的构造函数中分配中间件

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
   public function __construct(){
      $this->middleware('auth');
   }
}

这里我们使用UserController构造函数中的中间件方法分配auth中间件。

例子 (Example)

Step 1 - 将以下代码行添加到app/Http/routes.php文件并保存。

routes.php

<?php
Route::get('/usercontroller/path',[
   'middleware' => 'First',
   'uses' => 'UserController@showPath'
]);

Step 2 - 通过执行以下代码行创建一个名为FirstMiddleware的中间件。

php artisan make:middleware FirstMiddleware

Step 3 - 将以下代码添加到app/Http/Middleware新创建的FirstMiddleware的handle方法中。

FirstMiddleware.php

<?php
namespace App\Http\Middleware;
use Closure;
class FirstMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>First Middleware';
      return $next($request);
   }
}

Step 4 - 通过执行以下命令创建一个名为SecondMiddleware的中间件。

php artisan make:middleware SecondMiddleware

Step 5 - 在app/Http/Middleware新创建的SecondMiddleware的handle方法中添加以下代码。

SecondMiddleware.php

<?php
namespace App\Http\Middleware;
use Closure;
class SecondMiddleware {
   public function handle($request, Closure $next){
      echo '<br>Second Middleware';
      return $next($request);
   }
}

Step 6 - 通过执行以下行创建一个名为UserController的控制器。

php artisan make:controller UserController --plain

Step 7 - 成功执行URL后,您将收到以下输出 -

UserController1

Step 8 - 将以下代码复制到app/Http/UserController.php文件。

app/Http/UserController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
   public function __construct(){
      $this->middleware('Second');
   }
   public function showPath(Request $request){
      $uri = $request->path();
      echo '<br>URI: '.$uri;
      $url = $request->url();
      echo '<br>';
      echo 'URL: '.$url;
      $method = $request->method();
      echo '<br>';
      echo 'Method: '.$method;
   }
}

Step 9 - 现在,如果尚未执行,请执行以下命令启动php的内部Web服务器。

php artisan serve

Step 10 - 访问以下URL。

http://localhost:8000/usercontroller/path

Step 11 - 输出将如下图所示。

UserController2

宁静的资源控制器

通常在创建应用程序时,我们需要执行CRUD (Create, Read, Update, Delete)操作。 Laravel让我们的工作变得轻松。 只需创建一个控制器,Laravel将自动提供CRUD操作的所有方法。 您还可以为routes.php文件中的所有方法注册单个路由。

例子 (Example)

Step 1 - 通过执行以下命令创建一个名为MyController的控制器。

php artisan make:controller MyController

Step 2 - 添加以下代码

app/Http/Controllers/MyController.php文件。

app/Http/Controllers/MyController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MyController extends Controller {
   public function index(){
      echo 'index';
   }
   public function create(){
      echo 'create';
   }
   public function store(Request $request){
      echo 'store';
   }
   public function show($id){
      echo 'show';
   }
   public function edit($id){
      echo 'edit';
   }
   public function update(Request $request, $id){
      echo 'update';
   }
   public function destroy($id){
      echo 'destroy';
   }
}

Step 3 - 在app/Http/routes.php文件中添加以下代码行。

app/Http/routes.php

Route::resource('my','MyController');

Step 4 - 我们现在通过向资源注册控制器来注册MyController的所有方法。 下面是资源控制器处理的操作表。

动词 路径 行动 路线名称
GET/myindexmy.index
GET/my/createcreatemy.create
POST/mystoremy.store
GET/my/{my}showmy.show
GET/my/{my}/editeditmy.edit
PUT/PATCH/my/{my}updatemy.update
DELETE/my/{my}destroymy.destroy

Step 5 - 尝试执行下表中显示的URL。

网址 描述 输出图像
http://localhost:8000/my 执行MyController.php的索引方法 index
http://localhost:8000/my/create 执行MyController.php的create方法 create
http://localhost:8000/my/1 执行MyController.php的show方法 show
http://localhost:8000/my/1/edit 执行MyController.php的编辑方法 edit

隐式控制器

隐式控制器允许您定义单个路由来处理控制器中的每个操作。 您可以使用Route:controller方法在route.php文件中定义它,如下所示。

Route::controller(‘base URI’,’<class-name-of-the-controller>’);

替换为您给控制器的类名。

控制器的方法名称应以HTTP动词开头,如get或post。 如果你用get启动它,它将只处理get请求,如果它以post开头,那么它将处理post请求。 在您可以使用HTTP谓词之后,您可以为该方法指定任何名称,但它应该遵循URI的标题案例版本。

例子 (Example)

Step 1 - 执行以下命令以创建控制器。 我们保留了类名ImplicitController 。 您可以在课程中提供您选择的任何名称。

php artisan make:controller ImplicitController --plain

Step 2 - 成功执行第1步后,您将收到以下输出 -

Implicitcontroller

Step 3 - 将以下代码复制到

app/Http/Controllers/ImplicitController.php文件。

app/Http/Controllers/ImplicitController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
   /**
      * Responds to requests to GET /test
   */
   public function getIndex(){
      echo 'index method';
   }
   /**
      * Responds to requests to GET /test/show/1
   */
   public function getShow($id){
      echo 'show method';
   }
   /**
      * Responds to requests to GET /test/admin-profile
   */
   public function getAdminProfile(){
      echo 'admin profile method';
   }
   /**
      * Responds to requests to POST /test/profile
   */
   public function postProfile(){
      echo 'profile method';
   }
}

Step 4 - app/Http/routes.php下行添加到app/Http/routes.php文件以将请求路由到指定的控制器。

app/Http/routes.php

Route::controller('test','ImplicitController');

构造函数注入

Laravel服务容器用于解析所有Laravel控制器。 因此,您可以在其构造函数中键入提示控制器可能需要的任何依赖项。 依赖关系将自动解析并注入控制器实例。

例子 (Example)

Step 1 - 将以下代码添加到app/Http/routes.php文件中。

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Step 2 - 添加以下代码

app/Http/Controllers/ImplicitController.php文件。

app/Http/Controllers/ImplicitController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
   private $myclass;
   public function __construct(\MyClass $myclass){
      $this->myclass = $myclass;
   }
   public function index(){
      dd($this->myclass);
   }
}

Step 3 - 访问以下URL以测试构造函数注入。

http://localhost:8000/myclass

Step 4 - 输出将如下图所示。

我的课

方法注入

除了构造函数注入之外,您还可以在控制器的操作方法上键入 - 提示依赖项。

例子 (Example)

Step 1 - 将以下代码添加到app/Http/routes.php文件中。

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Step 2 - 添加以下代码

app/Http/Controllers/ImplicitController.php文件。

app/Http/Controllers/ImplicitController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
   public function index(\MyClass $myclass){
      dd($myclass);
   }
} 

Step 3 - 访问以下URL以测试构造函数注入。

http://localhost:8000/myclass

它将产生以下输出 -

构造函数注入

Laravel - Request

在本章中,您将详细了解Laravel中的请求。

检索请求URI

path方法用于检索请求的URI。 is方法用于检索所请求的URI,该URI与方法参数中指定的特定模式匹配。 要获取完整的URL,我们可以使用url方法。

例子 (Example)

Step 1 - 执行以下命令以创建名为UriController的新控制器。

php artisan make:controller UriController –plain

Step 2 - 成功执行URL后,您将收到以下输出 -

UriController

Step 3 - 创建控制器后,在该文件中添加以下代码。

app/Http/Controllers/UriController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UriController extends Controller {
   public function index(Request $request){
      // Usage of path method
      $path = $request->path();
      echo 'Path Method: '.$path;
      echo '<br>';
      // Usage of is method
      $pattern = $request->is('foo/*');
      echo 'is Method: '.$pattern;
      echo '<br>';
      // Usage of url method
      $url = $request->url();
      echo 'URL method: '.$url;
   }
}

Step 4 - 在app/Http/route.php文件中添加以下行。

app/Http/route.php

Route::get('/foo/bar','UriController@index');

Step 5 - 访问以下URL。

http://localhost:8000/foo/bar

Step 6 - 输出将如下图所示。

路径方法

检索输入

可以在Laravel中轻松检索输入值。 无论使用什么方法getpost ,Laravel方法都将以相同的方式检索两个方法的输入值。 我们可以通过两种方式检索输入值。

  • 使用input()方法
  • 使用Request实例的属性

Using the input() method

input()方法接受一个参数,即表单中字段的名称。 例如,如果表单包含用户名字段,那么我们可以通过以下方式访问它。

$name = $request->input('username');

使用Request实例的属性

input()方法一样,我们可以直接从请求实例获取username属性。

$request->username

例子 (Example)

请观察以下示例以了解有关请求的更多信息 -

Step 1 - 创建注册表单,用户可以在其中注册自己并将表单存储在resources/views/register.php

<html>
   <head>
      <title>Form Example</title>
   </head>
   <body>
      <form action = "/user/register" method = "post">
         <input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>">
         <table>
            <tr>
               <td>Name</td>
               <td><input type = "text" name = "name" /></td>
            </tr>
            <tr>
               <td>Username</td>
               <td><input type = "text" name = "username" /></td>
            </tr>
            <tr>
               <td>Password</td>
               <td><input type = "text" name = "password" /></td>
            </tr>
            <tr>
               <td colspan = "2" align = "center">
                  <input type = "submit" value = "Register" />
               </td>
            </tr>
         </table>
      </form>
   </body>
</html>

Step 2 - 执行以下命令以创建UserRegistration控制器。

php artisan make:controller UserRegistration --plain

Step 3 - 成功执行上述步骤后,您将收到以下输出 -

用户注册

Step 4 - 复制以下代码

app/Http/Controllers/UserRegistration.php控制器。

app/Http/Controllers/UserRegistration.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserRegistration extends Controller {
   public function postRegister(Request $request){
      //Retrieve the name input field
      $name = $request->input('name');
      echo 'Name: '.$name;
      echo '<br>';
      //Retrieve the username input field
      $username = $request->username;
      echo 'Username: '.$username;
      echo '<br>';
      //Retrieve the password input field
      $password = $request->password;
      echo 'Password: '.$password;
   }
}

Step 5 - 在app/Http/routes.php文件中添加以下行。

app/Http/routes.php

Route::get('/register',function(){
   return view('register');
});
Route::post('/user/register',array('uses'=>'UserRegistration@postRegister'));

Step 6 - 访问以下URL,您将看到注册表单,如下图所示。 输入注册详细信息并单击注册,您将在第二页上看到我们已检索并显示用户注册详细信息。

http://localhost:8000/register

Step 7 - 输出看起来如下图所示。

注册

Laravel - Cookie

Cookie在Web应用程序上处理用户会话时发挥着重要作用。 在本章中,您将学习如何在基于Laravel的Web应用程序中使用cookie。

创建Cookie

Cookie可以由Laravel的全局cookie帮助程序创建。 它是Symfony\Component\HttpFoundation\Cookie一个实例。 可以使用withCookie()方法将cookie附加到响应中。 创建Illuminate\Http\Response类的响应实例以调用withCookie()方法。 Laravel生成的Cookie经过加密和签名,客户端无法修改或读取。

这是一个带有解释的示例代码。

//Create a response instance
$response = new Illuminate\Http\Response('Hello World');
//Call the withCookie() method with the response method
$response->withCookie(cookie('name', 'value', $minutes));
//return the response
return $response;

Cookie()方法将采用3个参数。 第一个参数是cookie的名称,第二个参数是cookie的值,第三个参数是cookie的持续时间,之后cookie将自动删除。

可以使用forever方法永久设置Cookie,如下面的代码所示。

$response->withCookie(cookie()->forever('name', 'value'));

检索Cookie

设置cookie后,我们可以通过cookie()方法检索cookie。 这个cookie()方法只接受一个参数,它将是cookie的名称。 可以使用Illuminate\Http\Request实例调用cookie方法。

这是一个示例代码。

//’name’ is the name of the cookie to retrieve the value of
$value = $request->cookie('name');

例子 (Example)

请观察以下示例以了解有关Cookie的更多信息 -

Step 1 - 执行以下命令创建一个控制器,我们将在其中操作cookie。

php artisan make:controller CookieController --plain

Step 2 - 成功执行后,您将收到以下输出 -

CookieController

Step 3 - 复制以下代码

app/Http/Controllers/CookieController.php文件。

app/Http/Controllers/CookieController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class CookieController extends Controller {
   public function setCookie(Request $request){
      $minutes = 1;
      $response = new Response('Hello World');
      $response->withCookie(cookie('name', 'virat', $minutes));
      return $response;
   }
   public function getCookie(Request $request){
      $value = $request->cookie('name');
      echo $value;
   }
}

Step 4 - 在app/Http/routes.php file添加以下行。

app/Http/routes.php

Route::get('/cookie/set','CookieController@setCookie');
Route::get('/cookie/get','CookieController@getCookie');

Step 5 - 访问以下URL以设置cookie。

http://localhost:8000/cookie/set

Step 6 - 输出将如下所示。 屏幕截图中显示的窗口来自firefox,但根据您的浏览器,还可以从cookie选项中检查cookie。

你好,世界

Step 7 - 访问以下URL以从上述URL获取cookie。

http://localhost:8000/cookie/get

Step 8 - 输出将如下图所示。

Virat

Laravel - Response

Web应用程序根据许多参数以多种方式响应用户的请求。 本章将详细介绍Laravel Web应用程序中的响应。

基本回应

Laravel提供了几种不同的方式来返回响应。 响应可以从路由或从控制器发送。 可以发送的基本响应是简单的字符串,如下面的示例代码所示。 此字符串将自动转换为适当的HTTP响应。

例子 (Example)

Step 1 - 将以下代码添加到app/Http/routes.php文件中。

app/Http/routes.php

Route::get('/basic_response', function () {
   return 'Hello World';
});

Step 2 - Visit以下URL以测试基本响应。

http://localhost:8000/basic_response

Step 3 - 输出将如下图所示。

基本回应

附加标题

可以使用header()方法将响应附加到标头。 我们还可以附加一系列标题,如下面的示例代码所示。

return response($content,$status)
   ->header('Content-Type', $type)
   ->header('X-Header-One', 'Header Value')
   ->header('X-Header-Two', 'Header Value');

例子 (Example)

请观察以下示例以了解有关Response的更多信息 -

Step 1 - 将以下代码添加到app/Http/routes.php文件中。

app/Http/routes.php

Route::get('/header',function(){
   return response("Hello", 200)->header('Content-Type', 'text/html');
});

Step 2 - 访问以下URL以测试基本响应。

http://localhost:8000/header

Step 3 - 输出将如下图所示。

你好

附加Cookie

withcookie()辅助方法用于附加cookie。 使用此方法生成的cookie可以通过使用响应实例调用withcookie()方法来附加。 默认情况下,Laravel生成的所有cookie都经过加密和签名,以便客户端无法修改或读取它们。

例子 (Example)

请注意以下示例以了解有关附加Cookie的更多信息 -

Step 1 - 将以下代码添加到app/Http/routes.php文件中。

app/Http/routes.php

Route::get('/cookie',function(){
   return response("Hello", 200)->header('Content-Type', 'text/html')
      ->withcookie('name','Virat Gandhi');
});

Step 2 - Visit以下URL以测试基本响应。

http://localhost:8000/cookie

Step 3 - 输出将如下图所示。

你好

JSON响应

可以使用json方法发送JSON响应。 此方法将自动将Content-Type标头设置为application/jsonjson方法将自动将数组转换为适当的json响应。

例子 (Example)

请观察以下示例以了解有关JSON响应的更多信息 -

Step 1 - 在app/Http/routes.php文件中添加以下行。

app/Http/routes.php

Route::get('json',function(){
   return response()->json(['name' => 'Virat Gandhi', 'state' => 'Gujarat']);
});

Step 2 - 访问以下URL以测试json响应。

http://localhost:8000/json

Step 3 - 输出将如下图所示。

Json回复

Laravel - Views

在MVC框架中,字母V代表Views 。 它将应用程序逻辑和表示逻辑分开。 视图存储在resources/views目录中。 通常,视图包含将由应用程序提供的HTML。

例子 (Example)

请观察以下示例以了解有关视图的更多信息 -

Step 1 - 复制以下代码并将其保存在resources/views/test.php

<html>
   <body>
      <h1>Hello, World</h1>
   </body>
</html>

Step 2 - 在app/Http/routes.php文件中添加以下行以设置上述视图的路由。

app/Http/routes.php

Route::get('/test', function(){
   return view('test');
});

Step 3 - 访问以下URL以查看视图的输出。

http://localhost:8000/test

Step 4 - 输出将如下图所示。

理解视图

将数据传递给视图

在构建应用程序时,可能需要将数据传递给视图。 传递数组以查看辅助函数。 传递数组后,我们可以使用该键在HTML文件中获取该键的值。

例子 (Example)

请观察以下示例以了解有关将数据传递到视图的更多信息 -

Step 1 - 复制以下代码并将其保存在resources/views/test.php

<html>
   <body>
      <h1><?php echo $name; ?></h1>
   </body>
</html>

Step 2 - 在app/Http/routes.php文件中添加以下行以设置上述视图的路由。

app/Http/routes.php

Route::get('/test', function(){
   return view('test',[‘name’=>’Virat Gandhi’]);
});

Step 3 - 密钥名称的值将传递给test.php文件,$ name将替换为该值。

Step 4 - 访问以下URL以查看视图的输出。

http://localhost:8000/test

Step 5 - 输出将如下图所示。

维拉特甘地

与所有视图共享数据

我们已经看到了如何将数据传递给视图,但有时需要将数据传递给所有视图。 Laravel让这更简单。 有一个名为share()的方法可用于此目的。 share()方法将使用两个参数,key和value。 通常,可以从服务提供者的引导方法调用share()方法。 我们可以使用任何服务提供商, AppServiceProvider或我们自己的服务提供商。

例子 (Example)

请观察以下示例以了解有关与所有视图共享数据的更多信息 -

Step 1 - 在app/Http/routes.php文件中添加以下行。

app/Http/routes.php

Route::get('/test', function(){
   return view('test');
});
Route::get('/test2', function(){
   return view('test2');
});

Step 2 - 使用相同的代码创建两个视图文件 - test.phptest2.php 。 这些是将共享数据的两个文件。 在这两个文件中复制以下代码。 resources/views/test.php & resources/views/test2.php

<html>
   <body>
      <h1><?php echo $name; ?></h1>
   </body>
</html>

Step 3 - 更改文件app/Providers/AppServiceProvider.php的引导方法代码,如下所示。 (这里,我们使用了share方法,我们传递的数据将与所有视图共享。) app/Providers/AppServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider {
   /**
      * Bootstrap any application services.
      *
      * @return void
   */
   public function boot(){
      view()->share('name', 'Virat Gandhi');
   }
   /**
      * Register any application services.
      *
      * @return void
   */
   public function register(){
      //
   }
}

Step 4 - Visit以下网址。

http://localhost:8000/test
http://localhost:8000/test2

Step 5 - 输出将如下图所示。

维拉特甘地

Laravel - Blade Templates

Laravel 5.1引入了使用Blade这一模板引擎来设计独特布局的概念。 这样设计的布局可以被其他视图使用,并且包括一致的设计和结构。

与其他模板引擎相比,Blade在以下方面是独一无二的 -

  • 它不限制开发人员在视图中使用纯PHP代码。

  • 这样设计的刀片视图被编译和缓存,直到它们被修改。

欢迎刀片

Laravel的完整目录结构显示在此处给出的屏幕截图中。

您可以观察到所有视图都存储在resources/views目录中,而Laravel框架的默认视图是welcome.blade.php

请注意,其他刀片模板也是以类似方式创建的。

创建刀片模板布局的步骤

您必须使用以下步骤来创建刀片模板布局 -

Step 1

  • resources/views文件夹中创建一个布局文件夹。 我们将使用此文件夹将所有布局存储在一起。

  • 创建一个文件名master.blade.php ,它将包含以下代码 -

<html>
   <head>
      <title>DemoLaravel - @yield('title')</title>
   </head>
   <body>
      @yield('content')
   </body>

Step 2

在此步骤中,您应该扩展布局。 扩展布局涉及定义子元素。 Laravel使用Blade @extends指令来定义子元素。

在扩展布局时,请注意以下几点 -

  • 刀片布局中定义的视图以独特的方式注入容器。

  • 创建各种视图部分作为子元素。

  • 子元素作为child.blade.php存储在layouts文件夹中

此处显示了一个显示扩展上面创建的布局的示例 -

@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
   @parent
<p>This refers to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection

Step 3

要在视图中实现子元素,您应该以所需的方式定义布局。

登陆页面

观察此处显示的屏幕截图。 您可以发现登录页面中提到的每个链接都是超链接。 请注意,您还可以使用上面给出的步骤,借助刀片模板将它们创建为子元素。

Laravel - Redirections

命名路由用于为路由指定特定名称。 可以使用as数组键分配名称。

Route::get('user/profile', ['as' => 'profile', function () {
   //
}]);

Note - 在这里,我们为路由user/profile指定了名称profile user/profile

重定向到命名路由

例子 (Example)

请注意以下示例以了解有关重定向到命名路由的更多信息 -

Step 1 - 创建一个名为test.php的视图并将其保存在

resources/views/test.php

<html>
   <body>
      <h1>Example of Redirecting to Named Routes</h1>
   </body>
</html>

Step 2 - 在routes.php ,我们为test.php文件设置了路由。 我们已将其重命名为testing 。 我们还设置了另一个路由redirect ,它将请求重定向到指定的路由testing

app/Http/routes.php

Route::get('/test', ['as'=>'testing',function(){
   return view('test2');
}]);
Route::get('redirect',function(){
   return redirect()->route('testing');
});

Step 3 - 访问以下URL以测试命名路由示例。

http://localhost:8000/redirect

Step 4 - 执行上述URL后,当我们重定向到指定的路由testing ,您将被重定向到http:// localhost:8000/test。

Step 5 - 成功执行URL后,您将收到以下输出 -

维拉特甘地

重定向到控制器操作

不仅命名路由,我们还可以重定向到控制器操作。 我们需要简单地将控制器和操作名称传递给action方法,如以下示例所示。 如果要传递参数,可以将其作为action方法的第二个参数传递。

return redirect()->action(‘NameOfController@methodName’,[parameters]);

例子 (Example)

Step 1 - 执行以下命令以创建名为RedirectController的控制器。

php artisan make:controller RedirectController --plain

Step 2 - 成功执行后,您将收到以下输出 -

重定向控制器

Step 3 - 将以下代码复制到文件

app/Http/Controllers/RedirectController.php

app/Http/Controllers/RedirectController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class RedirectController extends Controller {
   public function index(){
      echo "Redirecting to controller's action.";
   }
}

Step 4 - 在app/Http/routes.php添加以下行。

app/Http/routes.php

Route::get('rr','RedirectController@index');
Route::get('/redirectcontroller',function(){
   return redirect()->action('RedirectController@index');
});

Step 5 - 访问以下URL以测试该示例。

http://localhost:8000/redirectcontroller

Step 6 - 输出将如下图所示。

RedirectController.jpg

Laravel - Working With Database

Laravel使用数据库进行处理非常容易。 Laravel目前支持以下4个数据库 -

  • MySQL
  • Postgres
  • SQLite
  • SQL Server

可以使用原始SQL,流畅查询构建器和Eloquent ORM触发对数据库的查询。 要了解Laravel的所有CRUD(创建,读取,更新,删除)操作,我们将使用简单的学生管理系统。

连接到数据库 (Connecting to Database)

config/database.php文件中config/database.php并在MySQL中创建具有结构的学院数据库,如下表所示。

Database: College

Table: student

列名称 列数据类型 额外
Idint(11) 主键| 自动递增
Namevarchar(25)

我们将在学生表中看到如何使用Laravel添加,删除,更新和检索数据库中的记录。

Sr.No. 记录和描述
1 插入记录

我们可以使用DB facade使用insert方法插入记录。

2 检索记录

配置数据库后,我们可以使用select方法使用DB facade检索记录。

3 更新记录

我们可以使用更新方法使用DB facade更新记录。

4 删除记录

我们可以使用delete方法使用DB facade删除记录。

Laravel - Errors and Logging

本章讨论Laravel项目中的错误和日志记录以及如何处理它们。

Errors

正在进行的项目承担一些错误。 启动新的Laravel项目时,已经为您配置了错误和异常处理。 通常,在本地环境中,我们需要查看错误以进行调试。 我们需要在生产环境中隐藏用户的这些错误。 这可以通过存储在应用程序根目录的环境文件.env设置的变量APP_DEBUG来实现。

对于本地环境, APP_DEBUG的值应为true但对于生产,需要将其设置为false以隐藏错误。

Note - 更改APP_DEBUG变量后,应重新启动Laravel服务器。

日志记录 (Logging)

日志记录是系统可以记录生成的错误的重要机制。 提高系统的可靠性很有用。 Laravel支持不同的日志记录模式,如single,daily,syslog和errorlog模式。 您可以在config/app.php文件中设置这些模式。

'log' => 'daily'

您可以在storage/logs/laravel.log文件中看到生成的日志条目。

创建自定义日志文件

要创建自定义日志文件,您应该执行以下步骤 -

Step 1 - 在此步骤中,您应使用Logfaçade在Laravel中创建自定义日志文件。 只需在控制器中使用use关键字即可声明façade。 它显示如下 -

<?php
use Log;
class LoginController extends Controller{
   public function FuncName(Request $request){
      // log something to storage/logs/laravel.log
      Log::info(['Request'=>$request]);}
   }
?>

这里,函数名称FuncName将通过在函数体内发送参数Log :: info来帮助创建日志。

Step 2 - 如果需要单独保存此文件,则应在此步骤中执行此操作。 为此,您可以在包含日志行之前使用像useDailyFiles()这样的演示函数,如下所示 -

<?php
use Log;
class LoginController extends Controller{
   public function FuncName(Request $request){
      // log something to storage/logs/debug.log
      Log::useDailyFiles(storage_path().'/logs/debug.log');
      Log::info(['Request'=>$request]);
   }
}
?>

将在文件debug.log跟踪所有日志。 日志中记录的错误对开发很有用。

Step 3 - 在此步骤中,您将处理Laravel中的记录器,其中包括除给定示例中提到的Log::info之外的各种类型。

Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);

可以包含在日志文件中的错误类型包括: emergency, alert, critical, error, warning, notice, infodebug

根据创建的日志,考虑Web应用程序的改进。

Laravel - Forms

Laravel提供了各种内置标签,可以轻松安全地处理HTML表单。 HTML的所有主要元素都是使用Laravel生成的。 为了支持这一点,我们需要使用composer将HTML包添加到Laravel。

例子1 (Example 1)

Step 1 - 执行以下命令继续执行相同操作。

composer require illuminate/html

Step 2 - 这将向Laravel添加HTML包,如下图所示。

HTML包

Step 3 - 现在,我们需要将上面显示的包添加到存储在config/app.php. Laravel配置文件config/app.php. 打开此文件,您将看到Laravel服务提供商列表,如下图所示。 添加HTML服务提供程序,如下图中的框图所示。

Laravel服务

Step 4 - 在HTML和Form的同一文件中添加别名。 请注意下图中勾勒框中指示的两行,并添加这两行。

概述框

Step 5 - 现在一切都安装好了。 让我们看看如何使用Laravel标签使用各种HTML元素。

打开表格

{{ Form::open(array('url' => 'foo/bar')) }}
   //
{{ Form::close() }}

生成标签元素

echo Form::label('email', 'E-Mail Address');

生成文本输入

echo Form::text('username');

指定默认值

echo Form::text('email', 'example@gmail.com');

生成密码输入

echo Form::password('password');

生成文件输入

echo Form::file('image');

生成复选框或无线电输入

echo Form::checkbox('name', 'value');
echo Form::radio('name', 'value');

生成检查的复选框或无线电输入

echo Form::checkbox('name', 'value', true);
echo Form::radio('name', 'value', true);

生成下拉列表

echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));

生成提交按钮

echo Form::submit('Click Me!');

例子2 (Example 2)

Step 1 - 复制以下代码以创建一个名为的视图

resources/views/form.php

resources/views/form.php

<html>
   <body>
      <?php
         echo Form::open(array('url' => 'foo/bar'));
            echo Form::text('username','Username');
            echo '<br/>';
            echo Form::text('email', 'example@gmail.com');
            echo '<br/>';
            echo Form::password('password');
            echo '<br/>';
            echo Form::checkbox('name', 'value');
            echo '<br/>';
            echo Form::radio('name', 'value');
            echo '<br/>';
            echo Form::file('image');
            echo '<br/>';
            echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
            echo '<br/>';
            echo Form::submit('Click Me!');
         echo Form::close();
      ?>
   </body>
</html>

Step 2 - 在app/Http/routes.php中添加以下行,为view form.php添加路由

app/Http/routes.php

Route::get('/form',function(){
   return view('form');
});

Step 3 - 访问以下URL以查看表单。

http://localhost:8000/form

Step 4 - 输出将如下图所示。

查看表格

Laravel - Localization

Laravel的本地化功能支持在应用程序中使用不同的语言。 您需要将不同语言的所有字符串存储在一个文件中,这些文件存储在resources/views目录中。 您应该为每种支持的语言创建一个单独的目录。 所有语言文件都应返回一个键控字符串数组,如下所示。

<?php
return [
   'welcome' => 'Welcome to the application'
];

例子 (Example)

Step 1 - 为语言创建3个文件 - English, FrenchGerman 。 在resources/lang/en/lang.php保存英文文件

<?php
   return [
      'msg' => 'Laravel Internationalization example.'
   ];
?>

Step 2 - 在resources/lang/fr/lang.php保存法语文件。

<?php
   return [
      'msg' => 'Exemple Laravel internationalisation.'
   ];
?>

Step 3 - 在resources/lang/de/lang.php保存德语文件。

<?php
   return [
      'msg' => 'Laravel Internationalisierung Beispiel.' 
   ];
?>

Step 4 - 通过执行以下命令创建一个名为LocalizationController的控制器。

php artisan make:controller LocalizationController --plain

Step 5 - 成功执行后,您将收到以下输出 -

LocalizationController

Step 6 - 将以下代码复制到文件

app/Http/Controllers/LocalizationController.php

app/Http/Controllers/LocalizationController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class LocalizationController extends Controller {
   public function index(Request $request,$locale){
      //set’s application’s locale
      app()->setLocale($locale);
      //Gets the translated message and displays it
      echo trans('lang.msg');
   }
}

Step 7 - 在app/Http/routes.php文件中为LocalizationController添加路由。 请注意,我们在本地化之后传递{locale}参数,我们将使用它来查看不同语言的输出。

app/Http/routes.php

Route::get('localization/{locale}','LocalizationController@index');

Step 8 - 现在,让我们访问不同的URL以查看所有不同的语言。 执行以下URL以查看英语输出。

http://localhost:8000/localization/en

Step 9 - 输出将如下图所示。

Laravel国际化

Step 10 - 执行以下URL以查看法语输出。

http://localhost:8000/localization/fr

Step 11 - 输出将如下图所示。

法语示例

Step 12 - 执行以下URL以查看德语输出

http://localhost:8000/localization/de

Step 13 - 输出将如下图所示。

德国的例子

Laravel - Session

会话用于在请求中存储有关用户的信息。 Laravel提供各种驱动程序,如file, cookie, apc, array, Memcached, Redis,database来处理会话数据。 默认情况下,使用文件驱动程序,因为它是轻量级的。 可以在config/session.php存储的文件中配置会话。

访问会话数据

要访问会话数据,我们需要一个可以通过HTTP请求访问的会话实例。 获取实例后,我们可以使用get()方法,它将获取一个参数key来获取会话数据。

$value = $request->session()->get('key');

您可以使用all()方法来获取所有会话数据而不是get()方法。

存储会话数据

可以使用put()方法put()数据存储在会话中。 put()方法将采用两个参数, “key”“value”

$request->session()->put('key', 'value');

删除会话数据

forget()方法用于从会话中删除项目。 此方法将以key作为参数。

$request->session()->forget('key');

使用flush()方法而不是forget()方法删除所有会话数据。 使用pull()方法从会话中检索数据并在之后删除它。 pull()方法也将key作为参数。 forget()pull()方法之间的区别在于, forget()方法不会返回会话的值,而pull()方法将返回它并从会话中删除该值。

例子 (Example)

Step 1 - 通过执行以下命令创建一个名为SessionController的控制器。

php artisan make:controller SessionController --plain

Step 2 - 成功执行后,您将收到以下输出 -

SessionController

Step 3 - 将以下代码复制到文件中

app/Http/Controllers/SessionController.php.

app/Http/Controllers/SessionController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class SessionController extends Controller {
   public function accessSessionData(Request $request){
      if($request->session()->has('my_name'))
         echo $request->session()->get('my_name');
      else
         echo 'No data in the session';
   }
   public function storeSessionData(Request $request){
      $request->session()->put('my_name','Virat Gandhi');
      echo "Data has been added to session";
   }
   public function deleteSessionData(Request $request){
      $request->session()->forget('my_name');
      echo "Data has been removed from session.";
   }
}

Step 4 - 在app/Http/routes.php文件中添加以下行。

app/Http/routes.php

Route::get('session/get','SessionController@accessSessionData');
Route::get('session/set','SessionController@storeSessionData');
Route::get('session/remove','SessionController@deleteSessionData');

Step 5 - 访问以下URL以set data in session

http://localhost:8000/session/set

Step 6 - 输出将如下图所示。

会话中的数据

Step 7 - 访问以下URL以get data from session

http://localhost:8000/session/get

Step 8 - 输出将如下图所示。

维拉特甘地

Step 9 - 访问以下URL以remove session data

http://localhost:8000/session/remove

Step 10 - 您将看到如下图所示的消息。

会议

Laravel - Validation

验证是设计应用程序时最重要的方面。 它验证传入的数据。 默认情况下,基本控制器类使用ValidatesRequests特性,该特征提供了一种方便的方法,可以使用各种强大的验证规则验证传入的HTTP请求。

Laravel中可用的验证规则

Laravel将始终检查会话数据中的错误,并自动将它们绑定到视图(如果可用)。 因此,重要的是要注意每个请求的所有视图中都会提供$errors变量,这样您就可以方便地假设$errors变量始终定义并且可以安全使用。 下表显示了Laravel中所有可用的验证规则。

Laravel中可用的验证规则
Accepted 活动网址 之后(日期)
Alpha Alpha Dash Alpha数字
Array 之前(日期) Between
BooleanConfirmedDate
日期格式 DifferentDigits
之间的数字 E-Mail 存在(数据库)
图像文件) InInteger
IP地址 JSONMax
MIME类型(文件) Min 不在
Numeric 正则表达式 Required
必需如果 要求除非 必需的
全部要求 没有要求 没有全部要求
SameSizeString
Timezone 独特(数据库) URL

$errors变量将是Illuminate\Support\MessageBag一个实例。 通过添加如下所示的代码,可以在视图文件中显示错误消息。

@if (count($errors) > 0)
   <div class = "alert alert-danger">
      <ul>
         @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
         @endforeach
      </ul>
   </div>
@endif

例子 (Example)

Step 1 - 通过执行以下命令创建一个名为ValidationController的控制器。

php artisan make:controller ValidationController --plain

Step 2 - 成功执行后,您将收到以下输出 -

ValidationController

Step 3 - 复制以下代码

app/Http/Controllers/ValidationController.php文件。

app/Http/Controllers/ValidationController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ValidationController extends Controller {
   public function showform(){
      return view('login');
   }
   public function validateform(Request $request){
      print_r($request->all());
      $this->validate($request,[
         'username'=>'required|max:8',
         'password'=>'required'
      ]);
   }
}

Step 4 - 创建名为resources/views/login.blade.php的视图文件,并在该文件中复制以下代码。

resources/views/login.blade.php

<html>
   <head>
      <title>Login Form</title>
   </head>
   <body>
      @if (count($errors) > 0)
         <div class = "alert alert-danger">
            <ul>
               @foreach ($errors->all() as $error)
                  <li>{{ $error }}</li>
               @endforeach
            </ul>
         </div>
      @endif
      <?php
         echo Form::open(array('url'=>'/validation'));
      ?>
      <table border = '1'>
         <tr>
            <td align = 'center' colspan = '2'>Login</td>
         </tr>
         <tr>
            <td>Username</td>
            <td><?php echo Form::text('username'); ?></td>
         </tr>
         <tr>
            <td>Password</td>
            <td><?php echo Form::password('password'); ?></td>
         </tr>
         <tr>
            <td align = 'center' colspan = '2'
               ><?php echo Form::submit('Login'); ?  ></td>
         </tr>
      </table>
      <?php
         echo Form::close();
      ?>
   </body>
</html>

Step 5 - 在app/Http/routes.php添加以下行。

app/Http/routes.php

Route::get('/validation','ValidationController@showform');
Route::post('/validation','ValidationController@validateform');

Step 6 - 访问以下URL以测试验证。

http://localhost:8000/validation

Step 7 - 单击“ Login按钮,不在文本字段中输入任何内容。 输出结果如下图所示。

登录

Laravel - File Uploading

在Laravel中上传文件非常简单。 我们需要做的就是创建一个视图文件,用户可以选择要上载的文件和处理上传文件的控制器。

在视图文件中,我们需要通过添加以下代码行来生成文件输入。

Form::file('file_name');

在Form :: open()中,我们需要添加'files'=》'true' ,如下所示。 这有助于将表单上载到多个部分。

Form::open(array('url' => '/uploadfile','files'=>'true'));

例子 (Example)

Step 1 - 创建名为resources/views/uploadfile.php的视图文件,并在该文件中复制以下代码。

resources/views/uploadfile.php

<html>
   <body>
      <?php
         echo Form::open(array('url' => '/uploadfile','files'=>'true'));
         echo 'Select the file to upload.';
         echo Form::file('image');
         echo Form::submit('Upload File');
         echo Form::close();
      ?>
   </body>
</html>

Step 2 - 通过执行以下命令创建一个名为UploadFileController的控制器。

php artisan make:controller UploadFileController --plain

Step 3 - 成功执行后,您将收到以下输出 -

UploadFileController

Step 4 - 复制以下代码

app/Http/Controllers/UploadFileController.php文件。

app/Http/Controllers/UploadFileController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UploadFileController extends Controller {
   public function index(){
      return view('uploadfile');
   }
   public function showUploadFile(Request $request){
      $file = $request->file('image');
      //Display File Name
      echo 'File Name: '.$file->getClientOriginalName();
      echo '<br>';
      //Display File Extension
      echo 'File Extension: '.$file->getClientOriginalExtension();
      echo '<br>';
      //Display File Real Path
      echo 'File Real Path: '.$file->getRealPath();
      echo '<br>';
      //Display File Size
      echo 'File Size: '.$file->getSize();
      echo '<br>';
      //Display File Mime Type
      echo 'File Mime Type: '.$file->getMimeType();
      //Move Uploaded File
      $destinationPath = 'uploads';
      $file->move($destinationPath,$file->getClientOriginalName());
   }
}

Step 5 - 在app/Http/routes.php添加以下行。

app/Http/routes.php

Route::get('/uploadfile','UploadFileController@index');
Route::post('/uploadfile','UploadFileController@showUploadFile');

Step 6 - 访问以下URL以测试上载文件功能。

http://localhost:8000/uploadfile

Step 7 - 您将收到提示,如下图所示。

浏览文件

Laravel - Sending Email

Laravel使用免费的功能丰富的库SwiftMailer来发送电子邮件。 使用库函数,我们可以轻松发送电子邮件而不会有太多麻烦。 电子邮件模板的加载方式与视图相同,这意味着您可以使用Blade语法并将数据注入模板。

下表显示了send函数的语法和属性 -

Syntax void send(string | array $ view,array $ data,Closure | string $ callback)
Parameters
  • $ view(string | array) - 包含电子邮件消息的视图的名称

  • $ data(array) - 要传递给视图的数据数组

  • $ callback - 一个Closure回调函数,它接收一个消息实例,允许您自定义邮件消息的收件人,主题和其他方面

Returnsnothing
Description 发送电子邮件。

在第三个参数中,$ callback闭包接收到消息实例,并且通过该实例,我们还可以调用以下函数并更改消息,如下所示。

  • $ message→subject('欢迎来到教程点');
  • $ message→from('email @ example.com','Mr. Example');
  • $ message→to('email @ example.com','Mr. Example');

一些不太常见的方法包括 -

  • $ message→sender('email @ example.com','Mr. Example');
  • $ message→returnPath('email @ example.com');
  • $ message→cc('email @ example.com','Mr. Example');
  • $ message→bcc('email @ example.com','Mr. Example');
  • $ message→replyTo('email @ example.com','Mr. Example');
  • $ message→priority(2);

要附加或嵌入文件,您可以使用以下方法 -

  • $ message→attach('path/to/attachment.txt');
  • $ message→embed('path/to/attachment.jpg');

邮件可以HTML或文本形式发送。 您可以通过传递数组来指示要在第一个参数中发送的邮件类型,如下所示。 默认类型是HTML。 如果要发送纯文本邮件,请使用以下语法。

语法 (Syntax)

Mail::send([‘text’=>’text.view’], $data, $callback);

在此语法中,第一个参数采用数组。 使用text作为视图的键名作为键的值。

例子 (Example)

Step 1 - 我们现在将从Gmail帐户发送电子邮件,您需要在Laravel环境文件- .env文件中配置您的Gmail帐户。 在您的Gmail帐户中启用两步验证并创建应用专用密码,然后更改.env参数,如下所示。

.env

MAIL_DRIVER = smtp
MAIL_HOST = smtp.gmail.com
MAIL_PORT = 587
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-application-specific-password
MAIL_ENCRYPTION = tls

Step 2 - 更改.env文件后,执行以下两个命令清除缓存并重新启动Laravel服务器。

php artisan config:cache

Step 3 - 通过执行以下命令创建一个名为MailController的控制器。

php artisan make:controller MailController --plain

Step 4 - 成功执行后,您将收到以下输出 -

MailController

Step 5 - 复制以下代码

app/Http/Controllers/MailController.php文件。

app/Http/Controllers/MailController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MailController extends Controller {
   public function basic_email(){
      $data = array('name'=>"Virat Gandhi");
      Mail::send(['text'=>'mail'], $data, function($message) {
         $message->to('abc@gmail.com', 'IOWIKI')->subject
            ('Laravel Basic Testing Mail');
         $message->from('xyz@gmail.com','Virat Gandhi');
      });
      echo "Basic Email Sent. Check your inbox.";
   }
   public function html_email(){
      $data = array('name'=>"Virat Gandhi");
      Mail::send('mail', $data, function($message) {
         $message->to('abc@gmail.com', 'IOWIKI')->subject
            ('Laravel HTML Testing Mail');
         $message->from('xyz@gmail.com','Virat Gandhi');
      });
      echo "HTML Email Sent. Check your inbox.";
   }
   public function attachment_email(){
      $data = array('name'=>"Virat Gandhi");
      Mail::send('mail', $data, function($message) {
         $message->to('abc@gmail.com', 'IOWIKI')->subject
            ('Laravel Testing Mail with Attachment');
         $message->attach('C:\laravel-master\laravel\public\uploads\image.png');
         $message->attach('C:\laravel-master\laravel\public\uploads\test.txt');
         $message->from('xyz@gmail.com','Virat Gandhi');
      });
      echo "Email Sent with attachment. Check your inbox.";
   }
}

Step 6 - 复制resources/views/mail.blade.php文件中的以下代码。

resources/views/mail.blade.php

<h1>Hi, {{ $name }}</h1>
l<p>Sending Mail from Laravel.</p>

Step 7 - 在app/Http/routes.php.添加以下行app/Http/routes.php.

app/Http/routes.php

Route::get('sendbasicemail','MailController@basic_email');
Route::get('sendhtmlemail','MailController@html_email');
Route::get('sendattachmentemail','MailController@attachment_email');

Step 8 - 访问以下URL以测试基本电子邮件。

http://localhost:8000/sendbasicemail

Step 9 - 输出屏幕看起来像这样。 检查收件箱以查看基本电子邮件输出。

发送基本电子邮件

Step 10 - 访问以下URL以测试HTML电子邮件。

http://localhost:8000/sendhtmlemail

Step 11 - 输出屏幕看起来像这样。 检查收件箱以查看html电子邮件输出。

HTML电子邮件

Step 12 - 访问以下URL以测试带附件的HTML电子邮件。

http://localhost:8000/sendattachmentemail

Step 13 - 您可以看到以下输出

邮件已发送

Note - 在MailController.php文件中,from方法中的电子邮件地址应该是您可以从中发送电子邮件地址的电子邮件地址。 通常,它应该是您服务器上配置的电子邮件地址。

Laravel - Ajax

Ajax (Asynchronous JavaScript and XML)是一组Web开发技术,利用客户端使用的许多Web技术来创建异步Web应用程序。 在视图文件中导入jquery库以使用jquery的ajax函数,这些函数将用于使用服务器中的ajax发送和接收数据。 在服务器端,您可以使用response()函数向客户端发送响应,并以JSON格式发送响应,您可以使用json()函数链接响应函数。

json() function syntax

json(string|array $data = array(), int $status = 200, array $headers = array(), int $options)

例子 (Example)

Step 1 - 创建名为resources/views/message.php的视图文件,并在该文件中复制以下代码。

<html>
   <head>
      <title>Ajax Example</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
      </script>
      <script>
         function getMessage(){
            $.ajax({
               type:'POST',
               url:'/getmsg',
               data:'_token = <?php echo csrf_token() ?>',
               success:function(data){
                  $("#msg").html(data.msg);
               }
            });
         }
      </script>
   </head>
   <body>
      <div id = 'msg'>This message will be replaced using Ajax. 
         Click the button to replace the message.</div>
      <?php
         echo Form::button('Replace Message',['onClick'=>'getMessage()']);
      ?>
   </body>
</html>

Step 2 - 通过执行以下命令创建一个名为AjaxController的控制器。

php artisan make:controller AjaxController --plain

Step 3 - 成功执行后,您将收到以下输出 -

AjaxController

Step 4 - 复制以下代码

app/Http/Controllers/AjaxController.php文件。

app/Http/Controllers/AjaxController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class AjaxController extends Controller {
   public function index(){
      $msg = "This is a simple message.";
      return response()->json(array('msg'=> $msg), 200);
   }
}

Step 5 - 在app/Http/routes.php添加以下行。

app/Http/routes.php

Route::get('ajax',function(){
   return view('message');
});
Route::post('/getmsg','AjaxController@index');

Step 6 - 访问以下URL以测试Ajax功能。

http://localhost:8000/ajax

Step 7 - 您将被重定向到一个页面,您将在其中看到如下图所示的消息。

替换消息

Step 8 - 单击按钮后,输出将如下图所示。

简单的消息

Laravel - Error Handling

大多数Web应用程序都有特定的错误处理机制。 使用这些,他们跟踪错误和异常,并记录它们以分析性能。 在本章中,您将了解Laravel应用程序中的错误处理。

重点

在继续进一步详细了解Laravel中的错误处理之前,请注意以下要点:

  • 对于任何新项目,Laravel默认情况下会在App\Exceptions\Handler类中记录错误和异常。 然后将它们提交给用户进行分析。

  • 当您的Laravel应用程序设置为调试模式时,Web应用程序中发生的每个错误都会显示带有堆栈跟踪的详细错误消息。

错误日志
  • 默认情况下,调试模式设置为false ,您可以将其更改为true 。 这使用户能够使用堆栈跟踪跟踪所有错误。

App Debug
  • Laravel项目的配置包括debug选项,该选项确定将向用户显示有关错误的信息量。 默认情况下,在Web应用程序中,该选项设置为.env文件的环境变量中定义的值。

    • 该值在本地开发环境中设置为false ,在生产环境中设置为false

    • 如果在生产环境中将该值设置为true ,则与最终用户共享敏感信息的风险会更高。

错误日志

在Web应用程序中记录错误有助于跟踪它们并规划删除它们的策略。 可以在config/app.php文件中的Web应用程序中config/app.php日志信息。 在处理Laravel中的错误日志时请注意以下几点 -

  • Laravel使用monolog PHP日志库。

  • 用于错误跟踪的日志记录参数是single, daily, syslogerrorlog

  • 例如,如果您希望在日志文件中记录错误消息,则应将应用程序配置中的日志值设置为daily ,如下面的命令所示 -

'log' => env('APP_LOG',’daily’),
  • 如果将daily日志模式作为参数,则默认情况下,Laravel会将错误日志记录为5 days 。 如果要更改最大日志文件数,则必须将配置文件中的log_max_files参数设置为所需的值。

‘log_max_files’ => 25;

严重程度

由于Laravel使用monolog PHP日志库,因此有各种参数用于分析严重性级别。 可用的各种严重性级别包括error, critical, alertemergency messages 。 您可以设置严重性级别,如下面的命令所示 -

'log_level' => env('APP_LOG_LEVEL', 'error')

Laravel - Event Handling

事件提供了一个简单的观察器实现,允许用户订阅和监听Web应用程序中触发的各种事件。 Laravel中的所有事件类都存储在app/Events文件夹中,侦听器存储在app/Listeners文件夹中。

用于在Web应用程序中生成事件和侦听器的artisan命令如下所示 -

php artisan event:generate

如上所述,该命令生成各个文件夹的事件和监听器。

事件生成器

事件和监听器提供了一种解耦Web应用程序的好方法,因为一个事件可以有多个彼此独立的监听器。 artisan命令创建的events文件夹包含以下两个文件:event.php和SomeEvent.php。 他们在这里显示 -

Event.php

<?php
namespace App\Events;
abstract class Event{
   //
}

如上所述, event.php包含类Event的基本定义,并调用命名空间App\Events 。 请注意,在此文件中创建了用户定义或自定义事件。

SomeEvent.php

<?php
namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class SomeEvent extends Event{
   use SerializesModels;
   /**
      * Create a new event instance.
      *
      * @return void
   */
   public function __construct(){
      //
   }
   /**
      * Get the channels the event should be broadcast on.
      *
      * @return array
   */
   public function broadcastOn(){
      return [];
   }
}

请注意,此文件使用序列化在Web应用程序中广播事件,并且必要的参数也在此文件中初始化。

例如,如果我们需要在构造函数中初始化order变量来注册事件,我们可以通过以下方式完成:

public function __construct(Order $order){
   $this->order = $order;
}

听众(Listeners)

监听器处理正在注册的事件中提到的所有活动。 artisan命令event:generateapp/listeners目录中创建所有app/listeners 。 Listeners文件夹包含一个文件EventListener.php ,它包含处理侦听器所需的所有方法。

EventListener.php

<?php
namespace App\Listeners;
use App\Events\SomeEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class EventListener{
   /**
      * Create the event listener.
      *
      * @return void
   */
   public function __construct(){
      //
   }
   /**
      * Handle the event.
      *
      * @param SomeEvent $event
      * @return void
   */
   public function handle(SomeEvent $event){
      //
   }
}

如代码中所述,它包括用于管理各种事件的handle功能。 我们可以创建针对单个事件的各种独立侦听器。

Laravel - Facades

Facade为应用程序服务容器中可用的类提供static接口。 Laravel facades充当服务容器中底层类的static proxies ,提供简洁,富有表现力的语法,同时保持比传统静态方法更多的可测试性和灵活性。

如何创建Facade

以下是在Laravel中创建Facade的步骤 -

  • Step 1 - 创建PHP类文件。

  • Step 2 - 将该类绑定到服务提供者。

  • Step 3 - 将ServiceProvider注册到

    Config\app.php作为提供者。

  • Step 4 - 创建此类扩展到的类

    lluminate的\ Support \外立面\门面。

  • Step 5 - 将Step 5点注册到Config\app.php作为别名。

门面类参考

Laravel船上有许多外墙。 下表显示了内置的Facade类引用 -

正面 服务容器绑定
AppIlluminate\Foundation\Applicationapp
ArtisanIlluminate\Contracts\Console\Kernelartisan
AuthIlluminate\Auth\AuthManagerauth
验证(实例) Illuminate\Auth\Guard
BladeIlluminate\View\Compilers\BladeCompilerblade.compiler
BusIlluminate\Contracts\Bus\Dispatcher
CacheIlluminate\Cache\Repositorycache
ConfigIlluminate\Config\Repositoryconfig
CookieIlluminate\Cookie\CookieJarcookie
CryptIlluminate\Encryption\Encrypterencrypter
DBIlluminate\Database\DatabaseManagerdb
DB(实例) Illuminate\Database\Connection
EventIlluminate\Events\Dispatcherevents
FileIlluminate\Filesystem\Filesystemfiles
GateIlluminate\Contracts\Auth\Access\Gate
HashIlluminate\Contracts\Hashing\Hasherhash
InputIlluminate\Http\Requestrequest
LangIlluminate\Translation\Translatortranslator
LogIlluminate\Log\Writerlog
MailIlluminate\Mail\Mailermailer
PasswordIlluminate\Auth\Passwords\PasswordBrokerauth.password
QueueIlluminate\Queue\QueueManagerqueue
队列(实例) Illuminate\Queue\QueueInterface
队列(基类) Illuminate\Queue\Queue
RedirectIlluminate\Routing\Redirectorredirect
RedisIlluminate\Redis\Databaseredis
RequestIlluminate\Http\Requestrequest
ResponseIlluminate\Contracts\Routing\ResponseFactory
RouteIlluminate\Routing\Routerrouter
SchemaIlluminate\Database\Schema\Blueprint
SessionIlluminate\Session\SessionManagersession
会话(实例) Illuminate\Session\Store
StorageIlluminate\Contracts\Filesystem\Factoryfilesystem
URLIlluminate\Routing\UrlGeneratorurl
ValidatorIlluminate\Validation\Factoryvalidator
验证者(实例) Illuminate\Validation\Validator
ViewIlluminate\View\Factoryview
查看(实例) Illuminate\View\View

例子 (Example)

Step 1 - 通过执行以下命令创建名为TestFacadesServiceProvider的服务提供者。

php artisan make:provider TestFacadesServiceProvider

Step 2 - 成功执行后,您将收到以下输出 -

FacadesServiceProvider

Step 3 - 在App/Test创建一个名为TestFacades.php的类。

App/Test/TestFacades.php

<?php
   namespace App\Test;
   class TestFacades{
      public function testingFacades(){
         echo "Testing the Facades in Laravel.";
      }
   }
?>

Step 4 - 在“App/Test/Facades”创建一个名为“TestFacades.php”的Facade类。

App/Test/Facades/TestFacades.php

<?php
namespace app\Test\Facades;
use Illuminate\Support\Facades\Facade;
class TestFacades extends Facade {
   protected static function getFacadeAccessor() { return 'test'; }
}

Step 5 - 在App/Test/Facades.创建一个名为TestFacadesServiceProviders.php的Facade类App/Test/Facades.

App/Providers/TestFacadesServiceProviders.php

<?php
namespace App\Providers;
use App;
use Illuminate\Support\ServiceProvider;
class TestFacadesServiceProvider extends ServiceProvider {
   public function boot() {
      //
   }
   public function register() {
      App::bind('test',function() {
         return new \App\Test\TestFacades;
      });
   }
}

Step 6 - 在文件config/app.php添加服务提供者,如下图所示。

config/app.php

服务提供者

Step 7 - 在文件config/app.php添加别名,如下图所示。

config/app.php

别号

Step 8 - 在app/Http/routes.php.添加以下行app/Http/routes.php.

app/Http/routes.php

Route::get('/facadeex', function(){
   return TestFacades::testingFacades();
});

Step 9 - 访问以下URL以测试Facade。

http://localhost:8000/facadeex

Step 10 - 访问URL后,您将收到以下输出 -

测试外墙

Laravel - Contracts

Laravel契约是一组具有各种功能的接口和框架提供的核心服务。

例如, Illuminate\Contracts\Queue\Queue合约使用排队作业所需的方法, Illuminate\Contracts\Mail\Mailer使用该方法发送电子邮件。

定义的每个合同都包括框架的相应实现。 所有Laravel合同都可以在GitHub存储库中找到,如下所述 -

https://github.com/illuminate/contracts

该存储库提供了Laravel框架中可用的各种合同,可以相应地下载和使用。

重点

在使用Laravel合同时,请注意以下要点 -

  • 必须在类的构造函数中定义外观。

  • 合同在类中明确定义,您无需在构造函数中定义合同。

例子 (Example)

考虑Laravel中用于授权的合同,如下所述 -

<?php
namespace Illuminate\Contracts\Auth\Access;
interface Authorizable{
   /**
      * Determine if the entity has a given ability.
      *
      * @param string $ability
      * @param array|mixed $arguments
      * @return bool
   */
   public function can($ability, $arguments = []);
}

契约使用函数can,其中包括名为abilityparameter和使用array形式的用户标识的arguments

您必须定义合同,如下面的语法所示 -

interface <contract-name>

合同像外墙一样用于创建经过充分测试的强大Laravel应用程序。 合同和外墙的使用存在各种practical differences

以下代码显示使用合同缓存存储库 -

<?php
namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository{
   /**
      * The cache instance.
   */
   protected $cache;
   /**
      * Create a new repository instance.
      *
      * @param Cache $cache
      * @return void
   */
   public function __construct(Cache $cache){
      $this->cache = $cache;
   }
}

合同不包含任何实现和新依赖项; 编写指定契约的替代实现很容易,因此用户可以在不修改任何代码库的情况下替换缓存实现。

Laravel - CSRF Protection

CSRF是指针对Web应用程序的跨站点伪造攻击。 CSRF攻击是系统的经过身份验证的用户执行的未授权活动。 因此,许多Web应用程序容易受到这些攻击。

Laravel以下列方式提供CSRF保护 -

Laravel包含一个内置的CSRF插件,可为每个活动用户会话生成令牌。 这些令牌验证相关的经过身份验证的用户是否发送了操作或请求。

实现 (Implementation)

本节将详细讨论Laravel中CSRF保护的实施。 在进一步开展CSRF保护之前,以下几点值得注意 -

  • CSRF在Web应用程序内声明的HTML表单中实现。 您必须在表单中包含隐藏的经过验证的CSRF令牌,以便Laravel的CSRF保护中间件可以验证请求。 语法如下所示 -

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • 您可以使用JavaScript HTTP库方便地构建JavaScript驱动的应用程序,因为这包括每个传出请求的CSRF令牌。

  • 文件resources/assets/js/bootstrap.js注册Laravel应用程序的所有令牌,并包含使用Axios HTTP library存储csrf-token meta标记。

没有CSRF令牌的表单

请考虑以下代码行。 它们显示了一个表单,它将两个参数作为输入: emailmessage

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

上述代码的结果如下所示 -

联系表

上面显示的表单将接受来自授权用户的任何输入信息。 这可能使Web应用程序容易受到各种攻击。

请注意,提交按钮包含控制器部分的功能。 postContact函数用于相关视图的控制器。 如下所示 -

public function postContact(Request $request){
   return $request-> all();
}

观察到表单不包含任何CSRF令牌,因此作为输入参数共享的敏感信息容易受到各种攻击。

使用CSRF令牌表单

以下代码行显示使用CSRF令牌重新设计的表单 -

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

获得的输出将返回带有令牌的JSON,如下所示 -

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "IoWiki",
   "email": "contact@iowiki.com"
}

这是单击提交按钮时创建的CSRF令牌。

Laravel - Authentication

身份验证是识别用户凭据的过程。 在Web应用程序中,身份验证由会话管理,会话使用电子邮件或用户名和密码等输入参数进行用户识别。 如果这些参数匹配,则称用户被认证。

本章将介绍Laravel Web应用程序中的身份验证过程。

Command

Laravel使用以下命令创建表单以及执行身份验证的关联控制器 -

php artisan make:auth

此命令有助于成功创建身份验证脚手架,如以下屏幕截图所示 -

认证

控制器(Controller)

用于认证过程的控制器是HomeController

<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
class HomeController extends Controller{
   /**
      * Create a new controller instance.
      *
      * @return void
   */
   public function __construct(){
      $this->middleware('auth');
   }
   /**
      * Show the application dashboard.
      *
      * @return \Illuminate\Http\Response
   */
   public function index(){
      return view('home');
   }
}

因此,生成的脚手架应用程序创建登录页面和用于执行身份验证的注册页面。 它们如下所示 -

Login

登录页面

注册(Registration)

寄存器

手动验证用户

Laravel使用Authfaçade,它有助于手动验证用户身份。 它包括验证其电子邮件和密码的尝试方法。

考虑LoginController的以下代码行,其中包括用于身份验证的所有函数 -

<?php
// Authentication mechanism
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller{
   /**
      * Handling authentication request
      *
      * @return Response
   */
   public function authenticate() {
      if (Auth::attempt(['email' => $email, 'password' => $password])) {
         // Authentication passed...
         return redirect()->intended('dashboard');
      }
   }
}

Laravel - Authorization

在前一章中,我们研究了Laravel中的身份验证过程。 本章将向您介绍Laravel中的授权过程。

身份验证和授权之间的区别

在进一步了解Laravel中的授权过程之前,让我们了解身份验证和授权之间的区别。

authentication ,Web应用程序或系统通过定义的凭据验证用户。 如果凭据根据记录匹配,则对它们进行身份验证,否则不进行身份验证。

当我们描述术语authorization ,它仅描述验证用户是否可以访问为其定义的资源。 换句话说,它验证了它们对请求和定义的资源的权限和权限。 如果经过身份验证的用户可以按定义访问资源,则表示他们已获得授权。

因此, authentication涉及检查用户凭据的有效性, authorization涉及检查经过身份验证的用户拥有的资源的权限和权限。

Laravel的授权机制

Laravel提供了一种简单的授权机制,包含两种主要方式,即GatesPolicies

写门和政策

门用于确定用户是否有权执行指定的操作。 它们通常使用Gate facade在App/Providers/AuthServiceProvider.php定义。 盖茨也是为执行授权机制而声明的功能。

策略在数组中声明,并在使用授权机制的类和方法中使用。

以下代码行说明如何使用Gates和Policies在Laravel Web应用程序中授权用户。 请注意,在此示例中, boot功能用于授权用户。

<?php
namespace App\Providers;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider{
   /**
      * The policy mappings for the application.
      *
      * @var array
   */
   protected $policies = [
      'App\Model' => 'App\Policies\ModelPolicy',
   ];
   /**
      * Register any application authentication/authorization services.
      *
      * @param \Illuminate\Contracts\Auth\Access\Gate $gate
      * @return void
   */
   public function boot(GateContract $gate){
      $this->registerPolicies($gate);
      //
   }
}

Laravel - Artisan Console

Laravel框架通过命令行提供三种主要交互工具,即: Artisan, TickerREPL 。 本章详细介绍了Artisan。

工匠简介

Artisan是Laravel中经常使用的命令行界面,它包含一组用于开发Web应用程序的有用命令。

例子 (Example)

以下是Artisan中几个命令的列表及其各自的功能 -

启动Laravel项目

php artisan serve

启用缓存机制

php artisan route:cache

查看Artisan支持的可用命令列表

php artisan list

查看有关任何命令的帮助并查看可用的选项和参数

php artisan help serve

以下屏幕截图显示了上面给出的命令的输出 -

工匠帮助服务

Writing Commands

除了Artisan中列出的命令之外,用户还可以创建可在Web应用程序中使用的自定义命令。 请注意,命令存储在app/console/commands directory

用于创建用户定义命令的默认命令如下所示 -

php artisan make:console <name-of-command>

输入上面给出的命令后,您可以看到输出,如下面给出的屏幕截图所示 -

defaultCommand

DefaultCommand创建的文件名为DefaultCommand.php ,如下所示 -

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class DefaultCommand extends Command{
   /**
      * The name and signature of the console command.
      *
      * @var string
   */
   protected $signature = 'command:name';
   /**
      * The console command description.
      *
      * @var string
   */
   protected $description = 'Command description';
   /**
      * Create a new command instance.
      *
      * @return void
   */
   public function __construct(){
      parent::__construct();
   }
   /**
      * Execute the console command.
      *
      * @return mixed
   */
   public function handle(){
      //
   }
}

此文件包含用户定义的命令的签名和描述。 名为handle的公共函数在执行命令时执行功能。 这些命令在同一目录中的Kernel.php文件中注册。

您还可以为用户定义的命令创建任务计划,如以下代码所示 -

<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel {
   /**
      * The Artisan commands provided by your application.
      *
      * @var array
   */
   protected $commands = [
      // Commands\Inspire::class,
      Commands\DefaultCommand::class
   ];
   /**
      * Define the application's command schedule.
      *
      * @param \Illuminate\Console\Scheduling\Schedule $schedule
      * @return void
   */
   protected function schedule(Schedule $schedule){
      // $schedule->command('inspire')
      // ->hourly();
   }
}

请注意,给定命令的任务计划在名为schedule的函数中定义,该函数包括用于调度hourly参数的任务的参数。

命令在命令数组中注册,命令数组包括命令的路径和名称。

注册命令后,它将在Artisan命令中列出。 当您调用指定命令的help属性时,将显示签名和描述部分中包含的值。

让我们看看如何查看命令DefaultCommand的属性。 您应该使用如下所示的命令 -

php artisan help DefaultCommand

Laravel - Encryption

加密是使用某些算法将纯文本转换为消息的过程,以便任何第三个用户都无法读取信息。 这有助于传输敏感信息,因为入侵者瞄准传输信息的机会较少。

使用称为Cryptography的过程执行Cryptography 。 要加密的文本称为Cipher Text ,加密后获得的文本或消息称为Cipher Text 。 将密文转换为纯文本的过程称为Decryption

Laravel使用AES-256AES-128加密器,它使用Open SSL进行加密。 Laravel中包含的所有值都使用协议Message Authentication Code进行签名,以便在加密后基础值不会被篡改。

配置 (Configuration)

用于在Laravel中生成key的命令如下所示 -

php artisan key:generate

请注意,此命令使用PHP安全随机字节的生成器,您可以看到输出,如下面给出的屏幕截图所示 -

工匠钥匙

上面给出的命令有助于生成可以在Web应用程序中使用的密钥。 观察下面显示的屏幕截图 -

Note

加密值在config/app.php文件中正确对齐,该文件包括两个加密参数,即keycipher 。 如果使用此键的值未正确对齐,则Laravel中加密的所有值都将不安全。

加密过程

可以使用Laravel类控制器中的encrypt helper来完成值的encrypt helper 。 这些值使用OpenSSL和AES-256密码加密。 所有加密值都使用消息验证代码(MAC)进行签名,以检查加密字符串的任何修改。

defaultCommand

下面显示的代码在控制器中提及,用于存储机密或敏感消息。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class DemoController extends Controller{
   **
      * Store a secret message for the user.
      *
      * @param Request $request
      * @param int $id
      * @return Response
   */
   public function storeSecret(Request $request, $id){
      $user = User::findOrFail($id);
      $user->fill([
         'secret' => encrypt($request->secret)
      ])->save();
   }
}

解密过程

使用decrypt helper完成值的decrypt helper 。 请注意以下代码行 -

use Illuminate\Contracts\Encryption\DecryptException;
// Exception for decryption thrown in facade
try {
   $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
   //
}

请注意,如果由于使用了无效的MAC而导致解密过程失败,则会引发相应的异常。

Laravel - Hashing

散列是将字符串转换为较短的固定值或表示原始字符串的键的过程。 Laravel使用Hash外观,它提供了一种以散列方式存储密码的安全方式。

基本用法

以下屏幕截图显示了如何创建名为passwordController的控制器,该控制器用于存储和更新密码 -

密码

以下代码行说明了passwordController的功能和用法 -

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller
class passwordController extends Controller{
   /**
      * Updating the password for the user.
      *
      * @param Request $request
      * @return Response
   */
   public function update(Request $request){
      // Validate the new password length...
      $request->user()->fill([
         'password' => Hash::make($request->newPassword) // Hashing passwords
      ])->save();
   }
}

使用make方法存储散列密码。 该方法允许管理在Laravel中普遍使用的bcrypt散列算法的工作因子。

针对哈希的密码验证

您应该根据哈希验证密码以检查用于转换的字符串。 为此,您可以使用check方法。 这显示在下面给出的代码中 -

if (Hash::check('plain-text', $hashedPassword)) {
   // The passwords match...
}

请注意, check方法将纯文本与hashedPassword变量进行比较,如果结果为true,则返回true值。

Laravel - Understanding Release Process

每个Web应用程序框架都有自己的版本历史记录,并且始终在进行更新和维护。 每个最新版本都会带来更改或弃用的新功能和新功能,因此您必须知道哪个版本适合您的项目。

说到Laravel,下面有两个活动版本 -

  • Laravel 4-于2013年5月发布
  • Laravel 5.1-于2015年2月发布

Laravel 5.1还包括最新版本的Laravel 5.1.5的各种版本,其中包括用于Web开发的所有强大功能。 Laravel的路线图或版本发布如下图所示 -

Laravel发布流程

在了解Laravel的发布过程中,以下几点值得注意 -

  • 在Laravel 5.1中删除了app/models的旧目录。

  • 所有控制器,中间件和请求都分组在app/Http文件夹下的目录中。

  • 新文件夹即Providers目录将替换为以前版本的Laravel 4.x中的app/start文件。

  • 所有语言文件和视图都将移动到resources目录。

  • 新工匠命令route:cache用于注册新路由,并包含在Laravel 5.1及其他版本的发行版中。

  • Laravel支持HTTP middleware ,还包括CSRF tokens和身份验证模型。

  • 所有身份验证模型都位于一个目录下,即resources/views/auth 。 它包括用户注册,身份验证和密码控制器。

↑回到顶部↑
WIKI教程 @2018