Laravel控制器


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

创建一个控制器

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

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

w替换为控制器的名称。这将创建一个简单的构造函数,因为我们正在传递参数 - 纯粹 。如果你不想创建一个简单的构造函数,你可以简单地忽略这个参数。创建的构造函数可以在 app / Http / Controllers中 看到。

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

句法

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

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

php artisan make:controller UserController --plain

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

UserController的

第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分配auth中间件。

在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 中间件。 **

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

routes.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的句柄方法中添加以下代码。

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后,您将收到以下输出 -

UserController1

第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步 - 输出将如下图所示。

![UserController2](/static/assets/tutorials/php/laravel/usercontroller2.jpg)

安稳的资源控制器

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

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

php artisan make:controller MyController

第2步 - 在下面添加代码

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

应用程序/ HTTP /控制器/ 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的所有方法。 以下是资源控制器处理的操作表。

动词 路径 行动 路线名称
得到 /我的 指数 my.index
得到 /我的/创建 创建 my.create
POST /我的 商店 my.store
得到 /我的我的} 显示 my.show
得到 /我的/ {}我/编辑 编辑 my.edit
PUT / PATCH /我的我的} 更新 my.update
删除 /我的我的} 破坏 my.destroy

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

网址 描述 输出图像
HTTP://本地主机:8000 /我的 执行MyController.php的索引方法 指数
HTTP://本地主机:8000 /我/创建 执行MyController.php的创建方法 创建
HTTP://本地主机:8000 /我/ 1 执行MyController.php的show方法 显示
HTTP://本地主机:8000 /我的/ 1 /编辑 执行MyController.php的编辑方法 编辑

隐式控制器

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

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

用您给控制器的类名替换<控制器名称>。

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

步骤1 - 执行以下命令来创建控制器。 我们保留了类名 ImplicitController 。你可以给你的任何名字给你的选择。

php artisan make:controller ImplicitController --plain

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

Implicitcontroller

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

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

应用程序/ HTTP /控制器/ 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 /控制器/ 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 /控制器/ 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

它会产生以下输出 -

构造函数注入