php artisan make:controller <controller-name> --plain
替换 <controller-name> 为您的控制器的名称。我们将创建一个简单的构造器使用传递一个参数— plain。 如果不希望创建一个普通的构造函数,可以忽略参数。 创建的构造函数在 app/http/controllers. 你会看到一些基本的编码已经自动生成了,你可以自定义添加编码。创建控制器可以通过routes.php文件中使用以下语法调用。
route::get(‘base uri’,’controller@method’);
php artisan make:controller 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' ]);
<?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'); } }
第1步 - 添加以下行到 app/http/routes.php 文件文件并保存。
routes.php
<?php route::get('/usercontroller/path',[ 'middleware' => 'first', 'uses' => 'usercontroller@showpath' ]);
php artisan make: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); } }
php artisan make:middleware secondmiddleware
第5步 - 添加以下代码在新创建一个处理方法 secondmiddleware 在 app/http/middleware/secondmiddleware.php.
secondmiddleware.php
<?php namespace app\http\middleware; use closure; class secondmiddleware { public function handle($request, closure $next){ echo '<br>second middleware'; return $next($request); } }
protected $routemiddleware = [ 'auth' => \app\http\middleware\authenticate::class, 'auth.basic' => \illuminate\auth\middleware\authenticatewithbasicauth::class, 'can' => \illuminate\foundation\http\middleware\authorize::class, 'guest' => \app\http\middleware\redirectifauthenticated::class, 'throttle' => \illuminate\routing\middleware\throttlerequests::class, 'first' => \app\http\middleware\firstmiddleware::class, 'second' => \app\http\middleware\secondmiddleware::class, ];
php artisan make:controller usercontroller
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; } }
php artisan serve
http://localhost:8000/usercontroller/path
通常情况下当开发一个应用,我们需要执行crud(创建,读取,更新,删除)操作。laravel使这项工作更容易做到的。只需创建一个控制器,而laravel会提供所有的crud操作的方法。您也可以注册一个路由的所有方法在routes.php文件中。
php artisan make:controller mycontroller
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'; } }
第3步 - 添加以下代码到文件:app/http/routes.php
app/http/routes.php
route::resource('my','mycontroller');
步骤4 - 我们现在通过使用资源控制器注册mycontroller 的所有方法。下面是由资源控制器处理的动作的列表。
动词
|
路径 | 动作 |
路由名称
|
---|---|---|---|
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 |
url | 描述 | 输出图像 |
---|---|---|
http://localhost:8000/my | 执行 controller.php 的 index 方法 | index |
http://localhost:8000/my/create | 执行 controller.php 的 create 方法 | create |
http://localhost:8000/my/1 | 执行 controller.php 的 show方法 | show |
http://localhost:8000/my/1/edit | 执行 controller.php 的 edit方法 | edit |
隐式控制器允许你定义一个路由处理控制器中的每一个动作。如下图所示使用 route:controller 方法,在路由文件 route.php 中定义它。
route::controller(‘base uri’,’<class-name-of-the-controller>’);
控制器的方法名应该是类似 get或post http动词开头。如果以 get 开始,它只会处理 get 请求,如果它使用 post 开駋那么将处理post请求。在http动词后,可以方法使用任何名称,但它应遵循 uri 的格式。
第1步 - 执行下面的命令来创建一个控制器。其类名称为 implicitcontroller。这个类你也可以使用其它的任何名称。
php artisan make:controller implicitcontroller
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'; } }
app/http/routes.php
route::controller('test','implicitcontroller');
laravel服务容器是用来解析所有laravel控制器。因此,你能够输入-提示控制器也许需要在其构造依赖。依赖关系将被自动解析和注射到控制器实例。
app/http/routes.php
class myclass{ public $foo = 'bar'; } route::get('/myclass','implicitcontroller@index');
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); } }
http://localhost:8000/myclass
app/http/routes.php
class myclass{ public $foo = 'bar'; } route::get('/myclass','implicitcontroller@index');
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); } }
http://localhost:8000/myclass