- Laravel 教程
- Laravel - 主页
- Laravel - 概述
- Laravel - 安装
- Laravel - 应用程序结构
- Laravel - 配置
- Laravel - 路由
- Laravel - 中间件
- Laravel - 命名空间
- Laravel - 控制器
- Laravel - 请求
- Laravel-Cookie
- Laravel - 响应
- Laravel - 视图
- Laravel - 刀片模板
- Laravel - 重定向
- Laravel - 使用数据库
- Laravel - 错误和日志记录
- Laravel - 表单
- Laravel - 本地化
- Laravel - 会话
- Laravel - 验证
- Laravel - 文件上传
- Laravel - 发送电子邮件
- Laravel - AJAX
- Laravel - 错误处理
- Laravel - 事件处理
- Laravel - 外观
- Laravel - 合约
- Laravel - CSRF 保护
- Laravel - 身份验证
- Laravel - 授权
- Laravel - Artisan 控制台
- Laravel - 加密
- Laravel - 哈希
- 了解发布流程
- Laravel - 访客用户门
- Laravel - Artisan 命令
- Laravel - 分页自定义
- Laravel - 转储服务器
- Laravel - 操作 URL
- Laravel 有用资源
- Laravel - 快速指南
- Laravel - 有用的资源
- Laravel - 讨论
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 后,您将收到以下输出 -
步骤 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 - 输出将如下图所示。
安静的资源控制器
在制作应用程序时,我们经常需要执行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
它将产生以下输出 -
