Linux系统: Laravel5.1 文档见解 - HTTP路由

由于新加入的公司要求使用Linux系统,所以在痛苦的前两天中适应了Linux(deepin)的系统之后,现在已经基本适应了这个系统了。现在自己的工作电脑搭载的是LAMP环境,公司要求新人需要学习Laravel 框架,并且由于之前的php的知识不够扎实,在学Laravel框架的同时也将W3C中的内容过了一遍,并且在上下班的路上将PHP权威指南看了一遍。可能由于PHP设计的目的就是用于解决问题,所以基本都是很快的将知识过一遍,在往后的开发中需要的话,可能涉及到部分知识需要边工作边查。

所以接下来是要开始总结我这七天来所做的一些事情,当然我不会在这里讲太多关于PHP的内容。

LAMP环境安装

apache2 : apt-get install apache2 

mysql: apt-get install mysql( 中间出现配置记得数据库的密码要记得,不然又要上网去查怎么更改自己的数据库密码(就会很麻烦) )

php: apt-get install php (以上是直接装最新的)


Laravel (内容是5.1版本的)


安装及配置(因为是从小白,从无到有这个过程,所以篇幅可能会比官方文档长一点)

在第一次接触Laravel 以及 令我头疼的Linux系统,首先要确保电脑上已经有LAMP(或者LNMP)环境,并且php需要有一些拓展(openssl、pdo、mbstring、tokenizer)(拓展的安装就是 apt-get install php-xxx,可能会是 php7.0-xxx),这个在你创建Laravel的项目如果缺少其中的拓展都会出现报错,自己根据原因来下载拓展。

上面的步骤没问题之后,就是到了安装composer这个步骤

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

完成了这个步骤之后,你的当前目录会有一个composer的包,用php composer 这个命令就能使用composer,当然我建议是将composer移动到全局环境(ln -s yourcomposer /usr/local/bin/)yourcomposer就是你的composer的路径(一定要绝对路径,并且指定到composer这个文件),这样往后需要用到composer 就可以直接使用composer。

完成之后,就可以安装Laravel了:

composer global require "laravel/installer=~1.1"   //安装laravel到全局环境

下面就可以创建laravel项目了,不过这样子只能搭载你的laravel存在的版本,不能指定到比较旧的版本

laravel new blog

如果上面的安装成功了但是laravel还是没有存在系统环境变量该怎么办?如果我要装5.1版本的laravel怎么办?

composer create-project laravel/laravel xxx --prefer-dist    // 装最新的laravel 到目录xxx
composer create-project laravel/laravel=5.1 xxx --prefer-dist    // 装5.1版本的laravel 到目录xxx


基础

HTTP路由

路由是什么,它可以将 url 与你的 function 结合在一块,使得在请求的时候能够做出一些处理并响应

路由基本是在 app/Http/routes.php中定义的:

基础路由

最基础的写法 Route::method ,参数是一个url与一个闭包(return 将作为响应结果)

Route::get('/', function () {
    return 'Hello World';
});

Route::post('foo/bar', function () {
    return 'Hello World';
});

Route::put('foo/bar', function () {
    //
});

Route::delete('foo/bar', function () {
    //
});

如果是为多个动作注册路由 (有时候需要一个路由来响应不同的HTTP动作)

Route::match(['get', 'post'], '/', function () {
    return 'Hello World';
});
Route::any('foo', function () {    // 任何HTTP动作都可以响应这个路由
    return 'Hello World';
});

生成路由对应的URLs

可以使用帮助函数 url 来生成路由对应的URLs:

$url = url('foo');


路由参数

有时我们需要在路由中捕获URI片段,比如,如果想要从URL中捕获用户ID,可以通过如下方式定义路由参数:

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

可以按需要定义在路由中定义多个路由参数:

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包。


  可选参数

有时候可能需要指定路由参数,并且使得该路由参数是可选的,可以通过在参数名后加一个?来标记:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});


 正则约束

可以使用路由实例上的where方法来约束路由参数的格式。where方法接收参数名和一个正则表达式来定义该参数如何被约束:

Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);


路由分组

路由分组允许我们在多个路由中共享路由属性,比如中间件和命名空间等,这样的话一大波共享属性的路由就不必再各自定义这些属性。共享属性以数组的形式被作为第一个参数传递到 Route::group方法中。

想要了解更多路由分组,我们希望通过几个简单的应用实例来展示其特性。


中间件

要分配中间件给分组中的所有路由,可以在分组属性数组中使用middleware键。中间件将会按照数组中定义的顺序依次执行:

Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function ()    {
        // 使用 Auth 中间件
    });

    Route::get('user/profile', function () {
        // 使用 Auth 中间件
    });
});

命名空间

另一个通用的例子是路由分组分配同一个PHP命名空间给多个控制器,可以在分组属性数组中使用namespace参数来指定分组中控制器的命名空间:

Route::group(['namespace' => 'Admin'], function(){
    // 控制器在 "App\Http\Controllers\Admin" 命名空间下

    Route::group(['namespace' => 'User'], function()
    {
        // 控制器在 "App\Http\Controllers\Admin\User" 命名空间下
    });
});

默认情况下,RouteServiceProvider包含routes.php并指定其所在命名空间,因此,我们只需要指定命名空间的App\Http\Controllers之后的一部分。


子域名路由

路由分组还可以被用于子域名路由通配符,子域名可以像URIs一样被分配给路由参数,从而允许捕获子域名的部分用于路由或者控制器,子域名可以通过分组属性数组中的domain键来指定:

Route::group(['domain' => '{account}.myapp.com'], function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

路由前缀

属性prefix可以用来为分组中每个给定URI添加一个前缀,比如,你想要为所有路由URIs前面添加前缀admin

Route::group(['prefix' => 'admin'], function () {
    Route::get('users', function ()    {
        // 匹配 "/admin/users" URL
    });
});

你还可以使用prefix参数为分组路由指定公共参数:

Route::group(['prefix' => 'accounts/{account_id}'], function () {
    Route::get('detail', function ($account_id)    {
        // 匹配 accounts/{account_id}/detail URL
    });
});

命名路由

命名路由使生成URLs或者重定向到指定路由变得很方便,在定义路由时指定路由名称,然后使用数组键as指定路由别名:

Route::get('user/profile', ['as' => 'profile', function () {
    //
}]);

还可以为控制器动作指定路由名称:

Route::get('user/profile', [
    'as' => 'profile', 'uses' => 'UserController@showProfile'
]);

 路由分组 & 命名路由

如果你在使用路由分组,可以在路由分组属性数组中指定as关键字来为分组中的路由设置一个共用的路由名前缀:

Route::group(['as' => 'admin::'], function () {
    Route::get('dashboard', ['as' => 'dashboard', function () {
        // 路由被命名为 "admin::dashboard"
    }]);
});

为命名路由生成URLs

一旦你为给定路由分配了名字,通过route函数生成URLs时就可以使用路由名字:

$url = route('profile');
$redirect = redirect()->route('profile');

如果路由定义了参数,可以将路由参数作为第二个参数传递给route函数。给定的路由参数将会自动插入URL中:

Route::get('user/{id}/profile', ['as' => 'profile', function ($id) {
    //
}]);
$url = route('profile', ['id' => 1]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值