Laravel教程:控制器(MVC框架之c)

2018-10-0307:57:57后端程序开发Comments2,412 views字数 6984阅读模式
MVC框架中,字母“C”代表控制器。它充当视图和模型之间的指挥中心(或桥梁)。
创建一个控制器
打开您正在使用的操作系统上的命令提示符或终端,然后键入以下命令使用 Artisan CLI (命令行接口)来创建控制器。
php artisan make:controller <controller-name> --plain

替换 <controller-name> 为您的控制器的名称。我们将创建一个简单的构造器使用传递一个参数— plain。 如果不希望创建一个普通的构造函数,可以忽略参数。 创建的构造函数在 app/Http/Controllers. 你会看到一些基本的编码已经自动生成了,你可以自定义添加编码。创建控制器可以通过routes.php文件中使用以下语法调用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

语法

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

示例

第1步- 执行以下命令来创建用户控制器 - UserController。
php artisan make:controller UserController
第2步 - 成功执行后,您会收到以下输出。
Laravel教程:控制器(MVC框架之c)

第3步 - 你可以在 app/Http/Controller/UserController.php 看到创建控制器已经自动生成一些基本的代码,您可以根据需要添加自己的编码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   //
}
控制器中间件

我们已经在前面学习了中间件,它可以与控制器一起使用。中间件也可以被分配到控制器的路由或控制器的构造函数中。可以使用中间件方法来分配中间件到控制器。 已注册中间件也可以限制到控制器的某些方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

分配中间件路由
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的构造方法。

示例

第1步 - 添加以下行到 app/Http/routes.php 文件文件并保存。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

routes.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?php
Route::get('/usercontroller/path',[
   'middleware' => 'First',
   'uses' => 'UserController@showPath'
]);
第2步 - 通过执行以下行创建一个名为FirstMiddleware 的中间件。
php artisan make:middleware FirstMiddleware
第3步 - 添加新创建一个名为 FirstMiddleware 的处理方法,下面的代码在 app/Http/Middleware/FirstMiddleware.php 。

FirstMiddleware.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?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步 - 添加以下代码在新创建一个处理方法 SecondMiddleware 在 app/Http/Middleware/SecondMiddleware.php.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

SecondMiddleware.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?php
namespace App\Http\Middleware;
use Closure;

class SecondMiddleware {
   public function handle($request, Closure $next){
      echo '<br>Second Middleware';
      return $next($request);
   }
}
注册上面两个中间件,打开文件:app/Http/Kernel.php
    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,
    ];
第6步 - 通过执行以下行创建一个名为 UserController 的控制器。
php artisan make:controller UserController
第7步 - URL成功执行后,您会看到以下输出 -
Laravel教程:控制器(MVC框架之c)
第8步 - 将以下代码复制到 app/Http/UserController.php 文件。

app/Http/UserController.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?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步 - 请访问以下网址。

http://localhost:8000/usercontroller/path文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

第11步- 将出现如下面的输出结果。
Laravel教程:控制器(MVC框架之c)
Restful 资源控制器

通常情况下当开发一个应用,我们需要执行CRUD(创建,读取,更新,删除)操作。Laravel使这项工作更容易做到的。只需创建一个控制器,而Laravel会提供所有的CRUD操作的方法。您也可以注册一个路由的所有方法在routes.php文件中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

示例

第1步 - 通过执行以下命令创建一个名为 myController 的控制器。
php artisan make:controller MyController
第2步 - 添加以下代码到文件:app/Http/Controllers/MyController.php

app/Http/Controllers/MyController.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?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文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

app/Http/routes.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

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

步骤4 - 我们现在通过使用资源控制器注册MyController 的所有方法。下面是由资源控制器处理的动作的列表。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

动词
路径动作
路由名称
GET/myindexmy.index
GET/my/createcreatemy.create
POST/mystoremy.store
GET/my/{my}showmy.show
GET/my/{my}/editeditmy.edit
PUT/PATCH/my/{my}updatemy.update
DELETE/my/{my}destroymy.destroy
第5步 - 尝试执行下表中的网址URL。
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 中定义它。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

Route::controller(‘base URI’,’<class-name-of-the-controller>’);
替换 <class-name-of-the-controller>使用你给定控制器类名。

控制器的方法名应该是类似 GET或POST HTTP动词开头。如果以 get 开始,它只会处理 get 请求,如果它使用 post 开駋那么将处理post请求。在HTTP动词后,可以方法使用任何名称,但它应遵循 URI 的格式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

示例

第1步 - 执行下面的命令来创建一个控制器。其类名称为 ImplicitController。这个类你也可以使用其它的任何名称。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

php artisan make:controller ImplicitController
第2步 - 成功执行后,会产生以下输出 -
第3步 - 将以下代码复制到 app/Http/Controllers/ImplicitController.php 文件。

app/Http/Controllers/ImplicitController.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?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 以将请求路由到指定的控制器。

app/Http/routes.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

Route::controller('test','ImplicitController');
构造器注入

Laravel服务容器是用来解析所有Laravel控制器。因此,你能够输入-提示控制器也许需要在其构造依赖。依赖关系将被自动解析和注射到控制器实例。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

示例

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

app/Http/routes.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
第2步 - 下面的代码添加到 app/Http/Controllers/ImplicitController.php 文件。

app/Http/Controllers/ImplicitController.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?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步 - 访问以下网址来测试构造器注入。

http://localhost:8000/myclass文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

第4步 - 输出结果如下面图所示。
Laravel教程:控制器(MVC框架之c)
方法注入
除了构造器注入,也可以输入 - 在你的控制器操作方法触发依赖。

示例

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

app/Http/routes.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
第2步 - 下面的代码添加到 app/Http/Controllers/ImplicitController.php 文件。

app/Http/Controllers/ImplicitController.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

<?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步 - 访问以下网址来测试构造器注入。

http://localhost:8000/myclass文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html

它会产生下面的输出 -
Laravel教程:控制器(MVC框架之c)
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/6157.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/6157.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定