Laravel - 快速指南


Laravel - 概述

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

Laravel 提供了一组丰富的功能,其中融合了 PHP 框架(如 CodeIgniter、Yii)和其他编程语言(如 Ruby on Rails)的基本功能。Laravel 拥有非常丰富的功能,这将提高 Web 开发的速度。

如果您熟悉核心 PHP 和高级 PHP,Laravel 将使您的任务变得更轻松。如果您打算从头开始开发网站,它可以节省大量时间。此外,用 Laravel 构建的网站是安全的,可以防止多种网络攻击。

Laravel 的优点

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

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

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

  • 它包括命名空间和接口,从而有助于组织和管理资源。

作曲家

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

所有依赖项都记录在位于源文件夹中的composer.json文件中。

工匠

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

Laravel 的特点

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

模块化

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

可测试性

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

路由

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

配置管理

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

查询生成器和 ORM

Laravel 包含一个查询生成器,有助于使用各种简单的链方法查询数据库。它提供了ORM(对象关系映射器)和称为 Eloquent 的ActiveRecord实现。

架构生成器

架构生成器以 PHP 代码维护数据库定义和架构。它还维护与数据库迁移相关的更改的跟踪。

模板引擎

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

电子邮件

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

验证

用户身份验证是 Web 应用程序中的常见功能。Laravel 简化了身份验证设计,因为它包含注册、忘记密码发送密码提醒等功能。

雷迪斯

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

队列

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

事件和命令总线

Laravel 5.1 包含命令总线,它有助于以简单的方式执行命令和分派事件。Laravel 中的命令按照应用程序的生命周期运行。

Laravel - 安装

为了管理依赖关系,Laravel 使用Composer。在安装 Laravel 之前,请确保您的系统上安装了 Composer。在本章中,您将看到 Laravel 的安装过程。

您必须按照下面给出的步骤将 Laravel 安装到您的系统上 -

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

https://getcomposer.org/download/

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

作曲家

步骤 3 - 在系统中的任何位置为新的 Laravel 项目创建一个新目录。之后,移动到创建新目录的路径并在其中键入以下命令来安装 Laravel。

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

现在,我们将重点关注5.7版本的安装。在 Laravel 5.7 版本中,您可以通过键入以下命令来安装完整的框架 -

composer create-project laravel/laravel test dev-develop

命令的输出如下所示 -

作曲家创建项目

Laravel框架可以直接使用包含最新框架的develop分支安装。

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

php artisan serve

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

行政人员

步骤 6 - 复制上面屏幕截图中灰色下划线的 URL,然后在浏览器中打开该 URL。如果看到以下界面,说明 Laravel 已经安装成功。

Laravel 已安装

Laravel - 应用程序结构

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

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

根目录

应用程序

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

安慰

Console 包含 Laravel 所需的 artisan 命令。它包括一个名为Commands的目录,其中所有命令均使用适当的签名进行声明。文件Kernal.php调用Inspire.php中声明的命令。

安慰

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

活动

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

活动

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

例外情况

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

HTTP

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

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

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

工作

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

听众

侦听器是事件相关的,它们包含用于处理事件和异常的方法。例如,声明的登录事件包括LoginListener事件。

政策

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

供应商

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

引导程序

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

配置

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

配置文件夹

数据库

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

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

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

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

民众

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

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

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

  • index.php - 初始化 Web 应用程序需要此文件。

资源

Resources 目录包含增强 Web 应用程序的文件。该目录中包含的子文件夹及其用途解释如下 -

  • 资产- 资产文件夹包含 LESS 和 SCSS 等文件,这些文件是 Web 应用程序样式所需的。

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

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

请注意,资源目录将被扁平化,而不是具有资产文件夹。其图示如下所示 -

资源目录更改

贮存

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

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

  • 框架- 它包含经常调用的会话、缓存和视图。

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

测试

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

小贩

Laravel 完全基于 Composer 依赖项,例如安装 Laravel 设置或包含第三方库等。Vendor 文件夹包含所有 Composer 依赖项。

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

应用程序结构中包含的文件如下所示 -

文件

Laravel - 配置

在上一章中,我们已经看到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文件中调用。上面给出的示例是调用基本本地参数。

访问配置值

您可以使用全局配置帮助器功能轻松访问应用程序中任何位置的配置值。如果配置值未初始化,则返回默认值。

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

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

配置缓存

为了提高性能并增强 Web 应用程序,缓存所有配置值非常重要。缓存配置值的命令是 -

config:cache

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

配置缓存

维护模式

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

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

php artisan down

PHP Artisian 羽绒服

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

启动维护模式

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

php artisan up

开始维护

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

Laravel 已安装

Laravel - 路由

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

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

  • 基本路由
  • 路由参数
  • 命名路线

基本路由

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

路线

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

例子

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

应用程序/Http/routes.php

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

资源/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>

路由机制如下图所示 -

路由机制

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

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

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

步骤 3 - 该函数调用模板文件resources/views/welcome.blade.php。接下来,该函数使用参数“welcome”调用view()函数,而不使用blade.php

这将产生 HTML 输出,如下图所示 -

Laravel5

路由参数

有时在Web应用程序中,您可能需要捕获随URL传递的参数。为此,您应该修改routes.php文件中的代码。

您可以通过两种方式捕获paths.php文件中的参数,如下所述 -

所需参数

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

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

可选参数

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

Route::get('user/{name?}', function ($name = 'TutorialsPoint') { return $name;});

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

命名路线

命名路由提供了一种创建路由的便捷方法。可以使用路由定义上的名称方法来指定路由链接。以下代码显示了使用控制器创建命名路由的示例 -

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

用户控制器将调用函数showProfile,参数为profile。参数使用名称方法定义路由。

Laravel - 中间件

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

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

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

php artisan make:middleware <middleware-name>

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

例子

观察以下示例以了解中间件机制 -

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

php artisan make:middleware AgeMiddleware

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

时代中间件

步骤 3 - AgeMiddleware将在app/Http/Middleware处创建。新创建的文件将包含已为您创建的以下代码。

<?php

namespace App\Http\Middleware;
use Closure;

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

注册中间件

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

  • 全局中间件
  • 路由中间件

全局中间件将在应用程序的每个 HTTP 请求上运行,而路由中间件将分配给特定的路由。中间件可以在app/Http/Kernel.php 注册。该文件包含两个属性$middleware$routeMiddleware$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,
];

例子

我们在前面的示例中创建了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);
}

例子

步骤 1 - 通过执行以下命令创建 RoleMiddleware -

php artisan make:middleware RoleMiddleware

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

中间件参数

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

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

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

角色中间件

步骤 5 - 执行以下命令来创建TestController -

php artisan make:controller TestController --plain

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

测试控制器

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

应用程序/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.";
   }
}

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

应用程序/Http/routes.php

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

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

http://localhost:8000/role

步骤 10 - 输出将如下图所示。

角色编辑器

可终止中间件

可终止中间件在响应发送到浏览器后执行某些任务。这可以通过创建一个中间件并在中间件中包含终止方法来完成。可终止中间件应注册到全局中间件。终止方法将接收两个参数$request$response。可以创建 Terminate 方法,如以下代码所示。

例子

步骤 1 -通过执行以下命令创建TerminateMiddleware 。

php artisan make:middleware TerminateMiddleware

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

可终止中间件

步骤 3 - 将以下代码复制到app/Http/Middleware/TerminateMiddleware.php中新创建的TerminateMiddleware中

<?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.";
   }
}

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

终止中间件

步骤 5 - 执行以下命令创建ABCController

php artisan make:controller ABCController --plain

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

ABC控制器

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

应用程序/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.";
   }
}

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

应用程序/Http/routes.php

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

步骤 9 - 访问以下 URL 来测试可终止中间件。

http://localhost:8000/terminate

步骤 10 - 输出将如下图所示。

ABC控制器

Laravel - 命名空间

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

命名空间声明

use关键字允许开发人员缩短命名空间。

use <namespace-name>;

Laravel 中使用的默认命名空间是 App,但是用户可以更改命名空间以与 Web 应用程序匹配。使用 artisan 命令创建用户定义的命名空间如下 -

php artisan app:name SocialNet

选择 Git

创建后的命名空间可以包含可在控制器和各种类中使用的各种功能。

Laravel - 控制器

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

创建控制器

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

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

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

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

句法

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

例子

步骤 1 - 执行以下命令创建UserController

php artisan make:controller UserController --plain

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

用户控制器

步骤 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'
]);

在这里,我们将身份验证中间件分配给配置文件路由中的 UserController。

在控制器的构造函数中分配中间件

<?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构造函数中的 middleware 方法分配auth中间件。

例子

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

路线.php

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

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

php artisan make:middleware FirstMiddleware

步骤 3 - 将以下代码添加到app/Http/Middleware中新创建的 FirstMiddleware 的句柄方法中。

FirstMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

class FirstMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>First Middleware';
      return $next($request);
   }
}

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

php artisan make:middleware SecondMiddleware

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

SecondMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

class SecondMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>Second Middleware';
      return $next($request);
   }
}

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

php artisan make:controller UserController --plain

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

用户控制器1

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

应用程序/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;
   }
}

步骤 9 - 现在通过执行以下命令来启动 php 的内部 Web 服务器(如果尚未执行)。

php artisan serve

步骤 10 - 访问以下 URL。

http://localhost:8000/usercontroller/path

步骤 11 - 输出将如下图所示。

用户控制器2

安静的资源控制器

在制作应用程序时,我们经常需要执行CRUD(创建、读取、更新、删除)操作。Laravel 让我们的工作变得轻松。只需创建一个控制器,Laravel 就会自动提供 CRUD 操作的所有方法。您还可以为routes.php 文件中的所有方法注册一个路由。

例子

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

php artisan make:controller MyController

步骤 2 - 添加以下代码

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

应用程序/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';
   }
}

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

应用程序/Http/routes.php

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

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

动词 小路 行动 路线名称
得到 /我的 指数 我的索引
得到 /我的/创建 创造 我的.create
邮政 /我的 店铺 我的商店
得到 /我的我的} 展示 我的秀
得到 /我的/{我的}/编辑 编辑 我的编辑
放置/修补 /我的我的} 更新 我的更新
删除 /我的我的} 破坏 我的销毁

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

网址 描述 输出图像
http://localhost:8000/我的 执行MyController.php的index方法 指数
http://localhost:8000/my/create 执行 MyController.php 的 create 方法 创造
http://localhost:8000/my/1 执行MyController.php的show方法 展示
http://localhost:8000/my/1/编辑 执行 MyController.php 的编辑方法 编辑

隐式控制器

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

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

将 <class-name-of-the-controller> 替换为您为控制器指定的类名。

控制器的方法名称应以 HTTP 动词开头,例如 get 或 post。如果以 get 开头,它将只处理 get 请求,如果以 post 开头,它将处理 post 请求。在 HTTP 动词 you can 之后,您可以为该方法指定任何名称,但它应该遵循 URI 的标题大小写版本。

例子

步骤 1 - 执行以下命令创建控制器。我们保留了类名ImplicitController。您可以为班级指定任何您选择的名称。

php artisan make:controller ImplicitController --plain

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

隐式控制器

步骤 3 - 将以下代码复制到

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

应用程序/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';
   }
}

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

应用程序/Http/routes.php

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

构造函数注入

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

例子

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

应用程序/Http/routes.php

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

步骤 2 - 添加以下代码

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

应用程序/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);
   }
}

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

http://localhost:8000/myclass

步骤 4 - 输出将如下图所示。

我的课

方法注入

除了构造函数注入之外,您还可以键入 - 暗示对控制器操作方法的依赖关系。

例子

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

应用程序/Http/routes.php

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

步骤 2 - 添加以下代码

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

应用程序/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);
   }
} 

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

http://localhost:8000/myclass

它将产生以下输出 -

构造函数注入

Laravel - 请求

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

检索请求 URI

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

例子

步骤 1 - 执行以下命令创建一个名为UriController的新控制器。

php artisan make:controller UriController –plain

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

Uri控制器

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

应用程序/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;
   }
}

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

应用程序/Http/route.php

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

步骤 5 - 访问以下 URL。

http://localhost:8000/foo/bar

步骤 6 - 输出将如下图所示。

路径法

检索输入

在 Laravel 中可以轻松检索输入值。无论使用哪种方法“get”“post”,Laravel 方法都会以相同的方式检索这两种方法的输入值。我们可以通过两种方式检索输入值。

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

使用 input() 方法

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

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

使用Request实例的属性

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

$request->username

例子

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

步骤 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>

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

php artisan make:controller UserRegistration --plain

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

用户注册

步骤 4 - 将以下代码复制到

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

应用程序/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;
   }
}

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

应用程序/Http/routes.php

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

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

http://localhost:8000/register

步骤 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');

例子

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

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

php artisan make:controller CookieController --plain

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

Cookie控制器

步骤 3 - 将以下代码复制到

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

应用程序/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;
   }
}

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

应用程序/Http/routes.php

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

步骤 5 - 访问以下 URL 以设置 cookie。

http://localhost:8000/cookie/set

步骤 6 - 输出将如下所示。屏幕截图中出现的窗口取自 Firefox,但根据您的浏览器,也可以从 cookie 选项检查 cookie。

你好世界

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

http://localhost:8000/cookie/get

步骤 8 - 输出将如下图所示。

维拉特

Laravel - 响应

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

基本反应

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

例子

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

应用程序/Http/routes.php

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

步骤 2 -访问以下 URL 来测试基本响应。

http://localhost:8000/basic_response

步骤 3 - 输出将如下图所示。

基本反应

附加标头

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

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

例子

观察下面的例子