初识laravel 路由

第一次接触laravel的时候,无从下手
安装以后,伪静态,设置应用目录为public
访问一下,ok,有laravel的欢迎界面,好像没什么问题

但是当自己想去写一个控制器,去尝试访问一下的时候
发现怎么也找不到是哪个控制器
然后去全局搜索,搜到了模板,修改了,也确实生效了
但是我还是找不到laravel的welcome界面是从哪个控制器渲染的
本想照葫芦画瓢的想法破灭了

没办法,只能先去老老是是看文档,看完了基础,特么的还是没说,怎么写一个控制器能请求到,说实话,其他框架玩惯的,转laravel开始真的头痛

后来发现是强制写路由 不写路由无法访问

路由定义在框架根目录的routes/web.php
在里面发现了我找了很久的欢迎界面的模板渲染

Route::get('/', function () {
    return view('welcome');
});

一些简单的代码,可以不用写控制器,laravel支持第二个参数不需要传入控制器位置
直接写个闭包函数,闭包函数内就是访问要执行的代码

控制器在 根目录下的app/http/controller里
例如我们在controller下建立一个文件夹admin
在里面写一个控制器为
注意要继承controller这个基类 我们声明命名空间为controllers下的admin

namespace App\Http\Controllers\admin;

use App\Http\Controllers\Controller;

class TestController extends Controller
{
    public function t1(){
        echo 1;
    }
}

我们想要访问到这个控制器应该这样去写
any代表是所有请求,可以使用get 或者post
参数1是请求什么地址可以访问到这个控制器
参数2是控制器的位置是admin下的TestController控制器的t1方法

Route::any('/t1','admin\TestController@t1');

实际开发中,我们可能需要两个模块,例如一个admin 一个api
每次都写 模块名很麻烦
可以这样去写

Route::group(['namespace' => 'admin'],function(){
    Route::any('/t1','TestController@t1');
});

这样闭包函数里的,就可以不用写模块名,他会自动去拼

我们还想更懒一点,因为我们后台的url可能都是 域名/admin开头

Route::group(['namespace' => 'admin','prefix'=>'admin'],function(){
    Route::group(['prefix'=>'yiyan'],function(){
        Route::any('','YiyanController@index');
        Route::any('list','YiyanController@list')->name('admin.yiyan.list');
        Route::any('edit','YiyanController@edit');
    });
    Route::group(['prefix'=>'miaosha'],function(){
        Route::any('goods','MiaoshaController@goods');
        Route::any('goods/detail','MiaoshaController@goods_detail');
        Route::any('create/order','MiaoshaController@create_order');
    });
});

prefix代表的就是闭包里面的会自动拼上prefix的值
例如prefix等于admin
里面写/t
那么实际url地址为 域名/admin/t

还有另一种写法

Route::namespace('admin')->group(function(){
    Route::prefix('admin')->group(function(){
        Route::prefix('yiyan')->group(function(){
            Route::any('','YiyanController@index');
            Route::any('list','YiyanController@list')->name('admin.yiyan.list');
            Route::any('edit','YiyanController@edit');
        });
    });
});

name是给路由起一个名字,我们可以用

route('路由的name');

来生成url,通常用在模板 laravel里模板输出是{{}}双花括号
也可以不给路由起name
用url函数也可以生成 例如模板内

{{url('admin/yiyan/list')}}

代表的就是生成 域名/admin/yiyan/list的url

Last modification:December 24th, 2019 at 04:14 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

简爱博客