📜  Laravel-控制器

📅  最后修改于: 2020-10-23 08:00:28             🧑  作者: Mango


在MVC框架中,字母“ C”代表控制器。它充当视图和模型之间的直接流量。在本章中,您将学习Laravel中的Controllers。

创建一个控制器

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

php artisan make:controller  --plain

替换为控制器的名称。当我们传递参数– 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上看到已创建的控制器,其中已经为您编写了一些基本编码,您可以根据需要添加自己的编码。

控制器中间件

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

将中间件分配给路由

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

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

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

middleware('auth');
   }
}

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

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

routes.php

 'First',
   'uses' => 'UserController@showPath'
]);

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

php artisan make:middleware FirstMiddleware

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

FirstMiddleware.php

First Middleware';
      return $next($request);
   }
}

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

php artisan make:middleware SecondMiddleware

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

SecondMiddleware.php

Second Middleware';
      return $next($request);
   }
}

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

php artisan make:controller UserController --plain

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

UserController1

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

app / Http / UserController.php

middleware('Second');
   }
   public function showPath(Request $request) {
      $uri = $request->path();
      echo '
URI: '.$uri; $url = $request->url(); echo '
'; echo 'URL: '.$url; $method = $request->method(); echo '
'; echo 'Method: '.$method; } }

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

php artisan serve

步骤10-访问以下URL。

http://localhost:8000/usercontroller/path

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

UserController2

宁静的资源控制器

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

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

php artisan make:controller MyController

步骤2-在中添加以下代码

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

app / Http / Controllers / MyController.php

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

app / Http / routes.php

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

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

Verb Path Action Route Name
GET /my index my.index
GET /my/create create my.create
POST /my store my.store
GET /my/{my} show my.show
GET /my/{my}/edit edit my.edit
PUT/PATCH /my/{my} update my.update
DELETE /my/{my} destroy my.destroy

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

URL Description Output Image
http://localhost:8000/my Executes index method of MyController.php index
http://localhost:8000/my/create Executes create method of MyController.php create
http://localhost:8000/my/1 Executes show method of MyController.php show
http://localhost:8000/my/1/edit Executes edit method of MyController.php edit

隐式控制器

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

Route::controller(‘base URI’,’’);

>替换为您为控制器指定的类名。

控制器的方法名称应以HTTP动词开头,例如get或post。如果以get开头,它将仅处理get请求;如果以post开头,则将处理post请求。可以在HTTP谓词后面加上任何名称,但该方法应遵循URI的标题大小写形式。

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

php artisan make:controller ImplicitController --plain

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

隐式控制器

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

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

app / Http / Controllers / ImplicitController.php

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

app / Http / routes.php

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

构造函数注入

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

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

app / Http / routes.php

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

第2步-将以下代码添加到

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

app / Http / Controllers / ImplicitController.php

myclass = $myclass;
   }
   public function index() {
      dd($this->myclass);
   }
}

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

http://localhost:8000/myclass

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

我的课

方法注入

除了注入构造函数外,您还可以键入-提示依赖于控制器的action方法。

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

app / Http / routes.php

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

第2步-将以下代码添加到

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

app / Http / Controllers / ImplicitController.php

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

http://localhost:8000/myclass

它将产生以下输出-

构造函数注入