Laravel学习记录--路由器,控制器

laraval框架之路由器

一,路由:将用户的请求转发给相应的程序处理,建立url和程序之间的映射
a.基础路由

 Route:get('user/show',function(){
    return 'user_show';
     })
b.多请求路由:一条路由实现多个请求
  Route::match(['get','post'],'user/register',function(){
	return "regiser";
    })
c.任意请求路由
   Route::any('user/show',function(){
	return "user_show"
    })

1.1.路由传参
b.1直接传参

Route::get('user/{id}/{name}',function($id,$name){
     return "user_show".$id+"user_name"+$name
})

b.2可选参数,可选参数最好放置末尾

  Route::get('page/{page?}',function($page=1){
        return "page_".$page
    })

1.2路由限制
c.1单参数限制

 Route::get('user/{id}',function(){
  dump('user_'.$id);
  })->where('id','\d+');//调用Route的where方法限制条件,正则限制
c.2多参数限制
 Route::get('user/{id}/{name}',function(){
	dump($user.$id);
    })->where(['id'=>'\d+','name'=>'[a-zA-z]+'])

1.3路由分组
Route::group([‘prefix’=>路由前缀],function(){
路由组
})
Route::group([‘namespace’=>‘命名空间’],function(){
路由组
}
或者
Route::prefix(‘路由前缀’)->group(function(){
路由组
})

二,控制器 app/Http/Controllers/
2.1创建控制器
cmd 窗口 输入 php artisan make:controller 控制器名
如: php artisan make:controller UserConteoller
创建一个uer控制器类
创建的控制器存放在appp/Http/Controller/目录下
也可以指定二级文件目录
如:php artisan make:controller Admin/AdminController
2.2访问控制器
Route::get(‘user/show’,UserController@show);
Routr::get(‘路由’,控制器名@方法名)‘
2.3资源控制器

Laravel 资源路由将典型的「CRUD」路由分配给具有单行代码的控制器。比如,创建一个控制器来处理应用保存的「照片」的所有 HTTP 请求

创建方法 :php artisan make:controller PhotoController --resource
在这里插入图片描述

查看资源控制器;

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PhotoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

给控制器注册一个资源路由

这个路由声明创建多个路由来处理资源上的各种行为。生成的控制器为每个行为保留了方法,同时还包括了 处理 HTTP 动作和 URI 的声明注释。

Route::resource(‘photos’, ‘PhotoController’);

使用命令查看路由
php artisan route:list

这里是引用

设置部分路由:

声明资源路由时,你可以指定控制器处理的部分行为,而不是所有默认的行为:

Route::resource('photo', 'PhotoController', ['only' => [
    'index', 'show'
]]);//这给控制器增加index和show行为

Route::resource('photo', 'PhotoController', ['except' => [
    'create', 'store', 'update', 'destroy'
]]);//除 create ,store ,update,destory的行为 

命名资源路由:

默认情况下,所有的资源控制器行为都有一个路由名称。你可以传入 names 数组来覆盖这些名称:

Route::resource('photo', 'PhotoController', ['names' => [
    'create' => 'photo.build'
]]);

命名资源路由参数

Route::resource('user', 'AdminUserController', ['parameters' => [
    'user' => 'admin_user'
]]);//生成/user/{admdin_user}

补充资源控制器

如果你想在默认的资源路由中增加额外的路由,你应该在 Route::resource 之前定义这些路由。否则由 resource
方法定义的路由可能会无意中优先于你补充的路由:

Route::get('photos/popular', 'PhotoController@method');

Route::resource('photos', 'PhotoController');
//{tip} 记住保持控制器的专一性。如果你需要典型的资源操作之外的方法,可以考虑将你的控制器分成两个更小的控制器。

三,中间件
引入
对于一个web应用来说,在一个请求真正处理前,我们可能会对请求做出各种判断,然后才可以让它继续传递到更深层次中。而如果我们使用if…else, 一旦需要得判断条件越来越多,会使代码更加难以维护,而中间件就可以解决这个问题,我们可以把这些判断独立出来做成中间件,可以方便的过滤请求,简单来说,就是插入到控制器方法之前或者之后执行的代码,以影响执行的结果,使代码更加灵活
创建中间件
命令:php artisan make:middleware MiddleName
路径:app\Http\Middleware\MinddleName

namespace App\Http\Middleware;

use Closure;
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {  
      echo 'this is middleware';
      return $next($request);
      
     

    }
}

注册中间件

  1. 注册到匿名函数
   Route::get('midd',['middleware'=>'App\Http\Middleware\Test',function(){
	echo "hello";
}]);


2.注册到控制器
app\Http\目录下的Kernel.php文件,在$routeMiddleware属性增加你先前定义的中间件

  protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'mail'=>\App\Http\Middleware\Mail::class//新增邮件发送中件间
    ];

在这里设置了中间件后,可直接注册到控制器,而不需要写很长的路径
如:

//注册路由
    Route::get('register','RegisterController@showRegistrationForm')->middleware('mail');//mail为$routeMiddleware定义的键

第二种注册到控制器:
与直接注册到匿名函数上不同,这里注册到控制器需设置’users’指定控制器

Route::get('/auth',['middleware'=>'middlename','控制器'])//错误的绑定方式
Route::get('/auth',['middleware'=>'middlename','uses'=>'控制器'])//正确的绑定方式

中间件案例:

1.用户访问某些网页时,验证用户是否登录
将要判断是否登录的网页组成一个路由组,路由组使用Laravel自带的auto中间件验证用户是否登录(也可自定义)

//限制用户登录组
Route::middleware('auth')->group(function(){
   //借款路由
    Route::get('/jie',function(){
    return view('woyaojiekuan');
    });

    //借款提交
    Route::post('jie','ProController@jiepost');
    //投标
    Route::get('toubiao/{pid}',"ProController@toubiao");
    Route::post('toubiao/{pid}','ProController@toubiaoPost');
    //我的账单
    Route::get('wdzd','ProController@zhangdan');
    //我的投资
    Route::get('wdtz','ProController@touzhi');
    //我的收益
    Route::get('wdsy','ProController@shouyi');
    //审核列表
    Route::get('prolist','CheckController@show');
    //审核
    Route::match(['get','post'],'check/{id}','CheckController@check');
    //打款路由
    Route::get('dakuan','GrowController@dakuan');
});

未登录默认跳转到别名为login的路由,给登录路由取别名

    Route::get('login','LoginController@showLoginForm')->name('login');//登录取别名,用户未登录跳转到login路由

2.用户注册网站后发送邮件通知
定义中间件 php artisan make:middleware
在app\Http\下的Kernel的routeMiddleware属性增加我们定义的中间件,方便调用

 protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'mail'=>\App\Http\Middleware\Mail::class//
    ];

中间件执行邮件发送,这里我使用的第三方类 nettemail composer require nette/mail

<?php

namespace App\Http\Middleware;

use Closure;
use Nette\Mail\Message;
use  Nette\Mail\SmtpMailer;
class Mail
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {  
        $res=$next($request);
        //发送邮件


     $mail = new Message;
     $mail->setFrom('点点贷 <[email protected]>')
    ->addTo($request->email)//用户邮箱
    ->setSubject('欢迎注册点点贷')
    ->setBody("尊敬的".$request->name."欢迎注册点点贷");

     $mailer = new SmtpMailer([
        'host' => 'smtp.qq.com',//邮件主机
        'username' => '[email protected]',//用户名
        'password' => '',//授权码
        'secure' => 'ssl',
        // 'context' =>  [
        //     'ssl' => [
        //         'capath' => '/path/to/my/trusted/ca/folder',
        //      ],
        // ],
        ]);
    $mailer->send($mail);
        return $res;

    }
}

控制器绑定中间件

//注册路由
    Route::get('register','RegisterController@showRegistrationForm')->middleware('mail');

在这里插入图片描述
注册成功

发布了17 篇原创文章 · 获赞 0 · 访问量 465

猜你喜欢

转载自blog.csdn.net/weixin_45143481/article/details/103934642