laravel4.2框架路由配置深入了解

laravel框架路由并不像YII或CI等框架那样有着固定的默认方式(路径,GET,POST来提取),因此在使用laravel框架时配置路由是必备的。

路由是通过配置注入到程序中,laravel路由非常灵活,不仅可以指定Controller对应的Action还可以完成很多的伪静太工作,在进入MVC前还可以做一些必要的参数过滤。

优点:

  1. 面向对象管理路由,配置灵活,可以针对不同的地址解析处理。
  2. 路由可过滤,分组提高路由调用精准安全。
  3. 路由执行不只针对MVC控制器,也可以写入其它自定义处理入口。
  4. 路由调用Action时可以定义调用传入的参数。
  5. 路由可以区分GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS等请方式调用不同的Action

缺点:

  1. 路由管理程序复杂,增加系统负载。
  2. 路由配置会随着系统升级改版不断增加,增加了维护时间。
  3. 路由配置灵活,但每个Controller最少一个路由配置管理,增加开发流程。
  4. 路由是入口必经之路,如果路由配置出错,会让整个系统报错,影响升级维护开发。

官方文档中对路由配置做了些常规的示例:http://v4.golaravel.com/docs/4.2/routing

路由配置都是通过 Illuminate\Support\Facades\Route 类,Route实际上是一个外观类,它继承于Illuminate\Support\Facades\Facade 并不是直接的路由类,框架通过类别名处理使Illuminate\Support\Facades\Route可以通过Route访问,这样可以大大的简化代码,Route类本身是全静态方法,只要调用的静态方法非当前类的,都可以当路由类来使用,(第一次使用必需是静态调用方法,如:Route::controller(‘user‘, ‘UserController‘);)。实际上在laravel框架中大量了使用这种外观模式,我们可以在 vendor/laravel/framework/src/Illuminate/Support/Facades/目录下看到很多的外观类,这些外观外都已经指定了对应的操作类,存放在loC容器类中,使用这种外观模式主要是统一入口类,简化程序,当然如果不使用这些外观类直接调用对应的类也可以,只是有的类在调用时没有那么方便,可能有的类在new时需要一些参数,而这些参数又要创建一些对象,相对对使用外观类来说复杂的多。

所有的外观类都可以通过 Facades::getFacadeRoot() 来获取外观类指定的实际类对象,如:

$route=Route::getFacadeRoot();//获取路由对象
var_dump(get_class($route));//打印对象
# 打印结果如下
# string(25) "Illuminate\Routing\Router"

所以

Route::controller(‘user‘, ‘UserController‘);
Route::getFacadeRoot()->controller(‘user‘, ‘UserController‘);

这两行代码功能结果是一样的。

laravel框架的外观模式比较复杂,这里就不多作说明。

上面我们打印了路由类(Illuminate\Routing\Router),现在我们来看看路由类的对外函数:

/*============= 路由基本配置 =============*/

/*
* ******** 常规路由配置 **********
*
*参数:$uri [string]指定URL地址,必须是标准的URL地址,不含域名
*      $action [Closure|array|string] 要调用的控制方法
*      $methods [array|string] 指定请求类型如:GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS
*返回值:\Illuminate\Routing\Route对象
*/
Route::get($uri, $action);//配置使用GET或HEAD请求路由

Route::post($uri, $action);//配置使用POST请求路由

Route::put($uri, $action);//配置使用PUT请求路由

Route::patch($uri, $action);//配置使用PATCH请求路由

Route::delete($uri, $action);//配置使用DELETE请求路由

Route::options($uri, $action);//配置使用OPTIONS请求路由

Route::any($uri, $action);//配置使用GET,HEAD,POST,PUT,PATCH,DELETE请求路由

Route::match($methods, $uri, $action);//配置自定义请求路由

常规路由配置是一对一的配置,也就是说一个action就得配置一个路由。

常规路由配置中,框架会先以请求类型匹配如:GET或POST然后提出匹配成功的路由,这种方式配置的路由并未加载对应的Action文件,只是暂存一些加载信息,相对安全,但其配置数据比较多。

注意:

$url 是请求路由地址,允许配置方法:

  • 直接对应的URL地址,如:‘test-route/action‘
  • 提取参数方式,如:‘test/{name}/{id?}‘ 注意:在‘{}‘内的是从请求路由URL中匹配提取的标识,并不单指请求的URL地址为 ‘test/name/id‘。在‘{}‘中只参数的占位标识,它可以是‘test/show/1’或‘show/list’等,相当于正则:‘test/[^/]+(/[^\]*)?’,占位标识还可以用来参数判断过滤处理,即指定参数的数据结构,如果匹配的则进入路由。

$action 参数允许有三种类型:

Closure 是匿名函数,当前路由配置成功后会调用这个匿名函数,默认是不会有参数传入,如果在路由URL中配置值则按配置的先后传入URL路由参数。

array 是数组方式,可有元素如:

array(
    # 指定访问域名,并且可以使用{}把域名的部分内容提取来当Action的参数,
    #    以下方式是把‘laravel‘提取出来传给Action方法第一个参数,
    #    可以同时提取多个,默认为空。
    # 注意:在{}中间的字符串只是参数名,并不是指定这个域名,只是指定了相关规则。
    # 同路由URL一样处理
    
    ‘domain‘=>‘www.{laravel}.com‘,

    # 必须设置,可以是匿名函数或控制器@方法
    #(最后还是会转为匿名函数,原值放在controller下标中保存)

    ‘uses‘=>‘[email protected]‘,

    ‘prefix‘=>‘dc-‘,  //路由URL前缀部分,默认为空。

    # 当前路由的名称,下面会详细说明。
    
    ‘as‘=>‘name‘,
    
    ‘controller‘=>‘[email protected]‘, //无须设置,该下标是uses下标的副本。
    
    ‘Closure‘=>function(){}, //类似uses,但只能指定匿名函数,优先级没有uses高
    
    ‘https‘, //指定HTTP是否为加密模式
    
    ‘http‘, //指定HTTP是否为非加密模式
    
    # 过滤参数说明:
    #  before 与after 元素是输入输出过滤处理,
    #  这两个需要通过Route::filter添加过滤项,否则无效
    #  过滤规则:[array|string]
    #  数组形式:array(‘name‘,‘list‘)
    #  字符串形式:‘name:filter|list:filter‘ 
    #  注意filter非必需,只是用来传入过滤器的参数值,
    #  可以用,来连接多个参数。如果没有filter参数则可以这样写 ‘name|list‘。
    
    
    ‘before‘=>‘name:filter|list:filter‘, //进入action前参数过滤处理规则
    
    ‘after‘=>array(‘name‘,‘list‘) //调用action返回值进行过滤处理规则
)

string 是直接给定路由要执行的 控制器@方法 例:[email protected]。格式必须正确。

提醒:路由中的URL或域名可以获取指定提取参数,如:

Route::get(‘index/{id}‘,‘[email protected]‘);

则可以通过:

Route::input(‘id‘);

获取参数值。参数键名必需相同。

还可以通过:

Route::current()->parameters();

获取全部参数数组。

路由指定的 as 名称使用

当在路由中指定了as键名,则当前这个路由器具有更多操作功能:

例:

Route::get(‘index/{id?}‘,[‘as‘=>‘name‘,‘users‘=>‘[email protected]‘])

通过 Route::currentRouteName() 获取当前执行路由的 as 值,如果不存在则返回 null

也可以用于生成URL地址或跳转。

URL::route(‘name‘); //生成URL地地址: index
Redirect::route(‘name‘); //跳转地址: index

或者:
URL::route(‘name‘,12); 生成URL地址:index/12
Redirect::route(‘name‘,12); 生成跳转URL为:index/12

也就是说,如果URL地址或域名中有指定参数,
则可以在 URL::route或Redirect::route追加参数

注意:如果上面例子中的URL为‘index/{id}’,不指定为{id?}时,则在使用URL::route时,则必需使用追加参数的方式,否则‘{id}’串会被生成到URL地址:/index/%7Bid%7D

路由判断,是比较常用的,通常如果我们指定了路由的AS则判断会更加方便,尤其是多个路由指定到同一个Action中时,会更容易判断。

Route::is(‘name‘); 匹配成功返回true,失败返回false,

参数可以使用 * 进行正则通配,但只能使用 * 作为通配,不能使用其它正则表达式
可以传入多个参数。如:
Route::is(‘name1‘,‘name2‘,‘name/laravel/*‘);

当然我们也可以使用 Request::is(‘index/*‘);来判断,当然这种判断不具有便捷性。

判断是否存在某个路由
Route::has(‘name‘);

其实,给路由添加 as 也比较方便权限管理,对于添加一个 as 值或添加一个 url 地址来比,as 名称有很大我方便性。

/*
* ******** 路由过滤器配置 **********
*
*参数:$name [string]过滤器名,实际会生成 router.filter:$name 事件标识
*      $callback [mixed] 要调用的过滤控制方法
*返回值:\Illuminate\Routing\Route对象
*/
Route::filter($name, $callback)

参数 $callback 支持参数类型:

  • Closure 匿名函数。
  • FilterClassName[@ActionName] 过滤器类名或者再加上过滤器方法名,默认方法名为filter。
  • array 要过滤的对象与方法名数组如 array(new FilterClass,‘number‘)

    最终是以调用函数的方法进行处理,参数顺序有:

  • 当前路由对象 Illuminate\Routing\Route
  • 当前请求对象 Illuminate\Http\Request
  • 过滤规则中追加的参数,如果没有追加则为空。

如:

# 添加常规路由

Route::get(‘test/filter‘,[
    ‘Closure‘=>function(){ //处理函数
        return ‘ok‘;
    },
    ‘before‘=>‘name:test,arg‘ //添加进入处理函数前过滤处理
 ]);

# 添加过滤器 

Route::filter(‘name‘,function($route, $request,$response1,$response2){
    var_dump($response1,$response2);die;
});

请求地址:/test/filter

结果:string(3) "test" string(3) "arg"

注意:在过滤器中返回值会直接影响到路由是否成功调用控制器的Action,只要过滤器中有返回值,都会直接跳过调用控制器的Action而直接把过滤器的返回值作为本次请求的结果,同样过滤器的返回值得按标准的类型处理,允许类型有:string,array,Redirect(地址跳转处理),或者ROM数据集等,不能出现布尔,资源,没有__toString函数的对象等。

/*
* ******** 路由全局选择性过滤**********
*
*参数:$pattern [string] 匹配路由URL串
*      $name [string] 要调用的过滤器名,通过 Route::filter 添加的过滤器
*      $methods [array|string|null] 请求类型如:get,post等,可以指定多个类型
*返回值:\Illuminate\Routing\Route对象
*
*/

# 只要匹配 $pattern 串的路由URL都执行,
#          $name 过滤器名,
#          $methods 是指定请求类型,允许单个或多个。
# 注意:$pattern 允许使用 * 通配,如 ‘admin/*‘ ,不能使用其它正则表达式。

Route::when($pattern, $name, $methods = null);

# 只要匹配 $pattern 正则的路由URL都执行,
#          $name 过滤器名,
#          $methods 是指定请求类型,允许单个或多个。
# 注意:这里 $pattern 是正则表达式。

Route::whenRegex($pattern, $name, $methods = null);

注意:选择性路由过滤是针对当前所有的注入路由节点,只要路由节点的URL匹配成功都会执行指定的过滤器,并不会因为有些路由节点在这之前而不影响。

如:

Route::get(‘admin/{id}‘,function(){

var_dump(Route::input(‘id‘));

});

Route::whenRegex(‘#admin/(\d+)?#‘,‘filterId‘,[‘post‘,‘get‘]);

Route::when(‘admin/*‘,‘filterNum‘,[‘post‘,‘get‘]);

Route::filter(‘filterNum‘,function(){

var_dump(‘filterNum‘);

});

Route::filter(‘filterId‘,function(){

var_dump(‘filterId‘);

});

请求地址:admin/12

输出的结果是:

string(9) "filterNum"
string(8) "filterId"
string(2) "12"

注意:使用when比使用whenRegex过滤的优先级高,也就是使用when要在使用whenRegex添加过滤先执行,不轮先程序后。whenRegex添加是完全使用正则的方式,所以第一个参数必需是合法可用的正则表达式。when与whenRegex是全局的,只要有添加的路由节点URL能匹配到则会进入过滤器。

/*
* ******** 路由参数判断过滤器配置 **********
*
*参数:$key [string]参数名称,如路由URL:‘test/filter/{id}‘ 中的id就是参数名
*      $pattern [string]要调用的过滤控制方法 过滤正则表达式
*      $patterns [array]设置多个 参数名称=>过滤正则表达式 数组
*返回值:null
*/
Route::pattern($key, $pattern);//设置全局条件,只影响设置后所有路由。
Route::patterns($patterns);//设置多个全局条件,

/*
******* 这里主要是针对 where 函数作说明,
******* 由于这个参数属于 Illuminate\Routing\Route(路由单点对象),要通过常规路由才能获得。
*
*参数:$name [array|string] 如果是字符串则是参数名,如果是数组则(参数名=>过滤正则)组成。
*      $expression [string|null]如果前参数为字符串,则这个为过滤正则,否则无意义。
*返回值:\Illuminate\Routing\Route对象
*/

Route::get(‘test/filter/{id}‘,‘[email protected]‘)->where($name, $expression = null);

注意:参数过滤器,并不是把参数转换为对于合法格式数据,而是参与路由匹配程序,也就是说,如果存在参数名,则必须达到表达式的要求则才通过参数匹配,否则是不会进入当前路由节点。正则不需要添加^$这两个开始与结束限定符,程序会默认添加。域名与路由URL指定的参数都会受参数过滤影响,提取出来的参数会依先后的顺序传入Action处理方法中(域名的参数在前面)

如:

Route::get(‘test/filter/{id}‘,‘[email protected]‘)->where(‘id‘, ‘\d+‘);

请求地址:

test/filter

test/filter/12

test/filter/arg

以上三个地址中,只有中间的一个会通过路由并进入[email protected]控制器。

如果路由规则为:

Route::get(‘test/filter/{id?}‘,‘[email protected]‘)->where(‘id‘, ‘\d+‘);

则前面两个请求都可以通过。

/*============= 路由Controller配置 =============*/

/*
*作用:批量添加路由
*参数:$controllers 每个数据元素相当于调用 controller 方法,[ URL=>Controller类名 ]
*返回值:null
*/
Route::controllers(array $controllers);

/*
*作用:添加Controller路由
*参数:$uri [string] 控制器的路由,不含Action部分,默认Action为Index
*      $controller [string] 控制器类名,含命名空间
*      $names [array] 设置路由节点的as别名,[Action=>as]
*返回值:null
*/
Route::controller($uri, $controller, $names = array());

这类路由配置比常规配置方便,每个Controller文件只占用一个路由配置,类似其它框架如YII或CI的路由规则,但每个Action命名必须以常规路由方法为前缀(get,post,any等,但match除外)打头,如:getList,postList,anyList等等。命名中Action的大小写必须非常严格,前缀必须小写,Action部分第一个字母大写(如果Action的名为: anyGoodsList 这种的则请求的URL地址应该是 $url/goods-list)。不要以为PHP对类名与方法名无大小写区分而忽略这点,其实这类路由配置会加载每一个Controller文件,并且使用映射类来提取可用的Action名,以大写字母为界线添加 - 符号(除前缀get,any,post等被忽略)生成对应的URL地址然后根据Action的请求类型使用对应常规添加路由的方法把这些Action都再次添加到常规路由列表中。

例如:

Route::controller(‘home‘, ‘HomeController‘,[‘anyList‘=>‘homeList‘]);

在HomeController.php文件中有三个Action方法名:

anyList

postEditData

getDelete

实际上路由解析器会生成三个常规路由:

Route::any(‘home/list/{one?}/{two?}/{three?}/{four?}/{five?}‘, array(‘uses‘ => ‘[email protected]‘,‘as‘=>‘homeList‘));

Route::post(‘home/edit-data/{one?}/{two?}/{three?}/{four?}/{five?}‘, array(‘uses‘ => ‘[email protected]‘));

Route::any(‘home/delete/{one?}/{two?}/{three?}/{four?}/{five?}‘, array(‘uses‘ => ‘[email protected]‘));

并且还会生成一个请求匹配失败的默认处理路由节点:

Route::any(‘home/{__missing}‘,‘[email protected]‘)->where(‘_missing‘,‘(.*)‘);

注意:使用Controller路由方式的,实际上是间接的使用常规路由,所以每个Action名称必须以常规路由方法名为前缀(get,post,any等,match除外)。所生成的URL地址是允许传入5个路径参数,这是默认的,当然如果你需要更多的参数可以去修改 Illuminate\Routing\ControllerInspector 的addUriWildcards方法的返回值,或者去扩展继承。

也正因为这类路由配置会加载Controller文件所以当某个文件出错或不存在时,整个路由块都无法正常工作。所以在使用这类路由配置时得注意,并且最后给对应的控制器添加一个missingMethod方法,这个方法是用来处理当没有匹配的Actin时执行的方法,可以用于处理错误请求或调试。

/*============= 路由高级配置 =============*/

/*============= 路由分组 =============*/

/*
*作用:以组的方式添加路由,同时添加一些相同的配置
*参数:$attributes [array] 公共配置属性,支持常规配置($action为数组时)所以属性。
*      $callback [closure] 匿名函数,(函数会传入一个参数Illuminate\Routing\Router)。
*返回值:null
*/
Route::group(array $attributes, Closure $callback);

组配置是方便一些有相同属性的路由批量追加的好方法,也可以递归组(最内层组会覆盖外层组相同的公共配置属性),组内的路由会自动提取当前所在组的公共配置属性,并且覆盖相同的配置。

配置说明:Route::group组配置,支持常规路由配置($action为数组时)所有元素,并且在这个基础上还增加了一个 ‘namespace‘ 键名,可以指定组内所以控制器的命名空间前缀,也就是说,组配置其实没有什么特殊功能,只是用于多个路由节点使用了相同的一些属性时,方便处理,使路由配置更加的清晰。

注意:只有namespace,prefix这两个属性值不会被覆盖,而是追加到当前路由节点的前面。namespace是追加到当前控制器的类名前面,而prefix则是追加到当前路由节点的prefix元素前面。常规路由指定了namespace属性是无效的。

如:

Route::group([

‘namespace‘=>‘index\goods‘,   //指定命名空间前缀

‘prefix‘=>‘dc-‘,      //指定URL前缀

‘domain‘=>‘www.{laravel}.com‘,    //指定域名

‘before‘=>‘name:filter|list:filter‘, //进入action前参数过滤处理规则
    ‘after‘=>array(‘name‘,‘list‘) //调用action返回值进行过滤处理规则

],function($router){

$router->get(‘index/list‘,‘[email protected]‘);//追加路由节点

//追加路由节点

$router->get(‘index/edit/{id}‘,[‘uses‘=>‘[email protected]‘,‘before‘=>‘‘]);

$router->controller(‘index/goods‘,‘GoodsController‘);//追加多个路由节点

});

上面组中第一个路由节点同等于:

Route::get(‘index/list‘,[

‘uses‘=>‘index\goods\[email protected]‘

‘prefix‘=>‘dc-‘,      //指定URL前缀

‘domain‘=>‘www.{laravel}.com‘,    //指定域名

‘before‘=>‘name:filter|list:filter‘, //进入action前参数过滤处理规则
        ‘after‘=>array(‘name‘,‘list‘) //调用action返回值进行过滤处理规则

]);

也就是说,以组的方式添加路由节点就是为了提取公共的配置,批量的追加到组内的路由节点中。组与组是可以递归的,当然递归后内层组是可以覆盖外层的公共配置(namespace,prefix是被连接而非覆盖)。

/*============= 路由给Action添加Model对象参数 =============*/
/*
*参数:$key [string] 参数名,必需与路由节点的提取参数名相同才会被调用替换
*      $class [string]  对应的Model类名。
*      $callback [Closure|null] 如果对应的Model返回空则执行这个匿名函数
*返回值:null
*/
Route::model($key, $class, Closure $callback = null);

注意:使用这种方式给控制器的Action方法传入Model对象参数时,如果Model对象获取数据为空时,必需要指定$callback匿名函数,否则路由报错(匹配失败),即无法正常进入路由。

Model注入参数方式是全局的,其所以前面路由节点只要参数名相同都会被替换并执行对应的Model。

例:

Route::model(‘user‘,‘Users‘,function(){ //注入Model参数,只要参数名为“user”则生成Model。

return []; //Model创建失败

});

Route::get(‘user/orders/{user}‘,function($user){ //追加路由,并提取参数“user”

return $user; //直接输出 JSON 串

})->where(‘user‘,‘\d+‘); //对参数“user”进行正则过滤处理

如果Users创建成功则输出对应的JSON串,如果失败则返回空JSON串(注意:框架会自动把数组转为JSON串返回给客户端)。

Model注入方式可以方便的把对应的Model注入到控制器的Action方法中,让程序可以更专注的去做修改添加等处理。

注入Model参数时,并未判断Model类名是否继承于ORM模型(Illuminate\Database\Eloquent\Model别名处理后为Eloquent)

代码如下:

也就是说,只要传入的Model类名包含了find方法,则可以顺利的进入注入,而不一定要指定为ORM模型,当然这样做有违背框架的初衷。

/*============= 路由给Action添加自定义处理参数 =============*/
/*
*参数:$key [string] 公共配置属性,支持常规配置($action为数组时)所以属性。
*      $binder [callable] 可调用函数(传入参数:对应参数值,当前路由节点对象)
*返回值:null
*/
Route::bind($key, $binder);

bind与model同为给Action注入参数,model是更专注为ROM模型处理的,而bind是面向创建更为灵活的参数。从上面的截图可以看的出来,model注入是bind注入的派生子项。

注意:由于bind对于$binder参数要求为可调用函数,则并不像model那样必需为匿名函数,所以bind有更多的调用方法,bind绑定也是全局的。

例:

Route::bind(‘user‘,function($id){  //绑定参数名“user”

return [$id]; //返回参数值

});

Route::get(‘user/order/{user}‘,function($user){  //追加路由节点,并且提取参数“user”的值

return $user; //返回参数JSON串

});

/*============= 路由资源控制器 =============*/
/*
*参数:$name [string] 公共配置属性,支持常规配置($action为数组时)所以属性。
*      $controller [string] 控制器类名
*      $options [array] 指定路由项
*
*说明:$options 数组结构:
*    array(
*        ‘only‘=>array(‘index‘, ‘create‘, ‘store‘, ‘show‘, ‘edit‘, ‘update‘, ‘destroy‘),
*        ‘except‘=>array(‘index‘, ‘create‘, ‘store‘, ‘show‘, ‘edit‘, ‘update‘, ‘destroy‘),
*        ‘names‘=>array(‘index‘=>‘resource-index‘),
*        ‘as‘=>‘resource-route‘
*    )
*  only 是只需要的Action方法名,except 是只在除了这些Actin方法名但优先级没有only高,也就是
*  有only时except无意义;names 是指定Action对应的路由节点 as 值,as 是指定当前资源路由下除
*  “update”路由节点外的 as 值前缀并以“.”连接默认的 as 值,names的优先级高于 as,也就是
*  说,设置了names的方法名,再设置 as 最终的路由节点以names为准,其它均无效。
*
*返回值:null
*/
Route::resource($name, $controller, array $options = array());

路由资源是一种以RESTful架构风格的固定路由生成模块,它不只是可以生成选择性的固定路由节点,还可以通过 artisan 命令自动生成Controller文件。具体的默认路由节点如下:

例:

Route::resource(‘home‘,‘HomeController‘)

实际上使用resource默认会生成路由节点有:

Route::get(‘home‘,[‘as‘=>‘home.index‘,‘uses‘=>‘[email protected]‘]);

Route::get(‘home/create‘,[‘as‘=>‘home.create‘,‘uses‘=>‘[email protected]‘]);

Route::post(‘home‘,[‘as‘=>‘home.store‘,‘uses‘=>‘[email protected]‘]);

Route::get(‘home/{home}‘,[‘as‘=>‘home.show‘,‘uses‘=>‘[email protected]‘]);

Route::get(‘home/{home}/edit‘,[‘as‘=>‘home.edit‘,‘uses‘=>‘[email protected]‘]);

Route::patch(‘home/{home}‘,‘[email protected]‘);

Route::delete(‘home/{home}‘,[‘as‘=>‘home.destroy‘,‘uses‘=>‘[email protected]‘]);

注意:"{home}"是$name参数以 "." 为拆分点最后段个字符串(内部的“-”会转为“_”)。除"update"节点外其它每个路由节点都会默认生成一个as值。当然也可以在添加资源路由时追加$options参数指定as值(以 names 下标的数组 [ 方法名 => as值 ] )或指定前缀(以 as 下标的字符串,最后以“.”连接默认的 as 连接名),当然 names 的优先级要比 as 高。

关于 as 值如果理解不来,可以使用,Route::currentRouteName() 获取当前的路由名,再分析。

路由资源使用的是RESTful架构,而这一架构并未得到很好的支持,尤其是浏览器,当然对应移动端的APP则可以使用,但国内对于这种架构认为还不够,所以这种路由方式只需要知道就可以,在实际应用中,会很少采用。

总结:laravel框架路由配置是以每个独立请求URL为一个节点,往往一个系统中有很多的请求地址,所以在配置路由时得因系统的大小合理规划,如果一直在一个文件只添加路由,时间一长,路由节点过多,则会不利于管理。

时间: 2024-10-28 20:02:08

laravel4.2框架路由配置深入了解的相关文章

express框架路由配置及congtroller自动加载

express框架在node官方推荐的一个框架,关于如何入门的文章,已经很多了,我就不在累赘了,本文的核心是如何修改文件使得更接近一个MVC的框架 express原生是通过require的方式实现了模块的加载,而且是在程序启动时一次性全部加载(因此我的按需加载的方案搁浅了),如果在配置路由的时候都加载一次,然后全部写在app.js文件中,我的天呐,对于一个大型项目来说极难维护,因此必须将其分割.下面我们就来干这么一件事. 上图是我的文件目录: controller  文件夹是控制器 model

YII框架路由配置

首先要在服务器配置(httpd.conf)中开启重写模块: #开启重写模块,将其前面的#去掉 LoadModule rewrite_module modules/mod_rewrite.so #Directory中允许覆盖开启 <Directory "${SRVROOT}/htdocs"> # # Possible values for the Options directive are "None", "All", # or any

Go语言之高级篇beego框架之参数配置与路由配置

一.参数配置 beego默认会解析当前应用下的conf/app.conf文件 1.1.beego的参数配置 appname = WEB httpport = 8080 runmode = dev 几种开发模式 [dev] httpprot = 8080 [prod] httpport = 8081 [test] httpport = 8082 //备注: beego.AppConfig.String( "dev::mysqluser" ) //dev标签 1.2.beego的应用参数配

Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交

今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点在其官方文档上并未提出.今天我们要做的事情就是通过浏览器访问静态文件,然后在静态文件中使用form表单往指定的路由上进行提交相应的数据. 一.静态文件的添加与访问 1.未使用Xcode管理的Perfect的静态文件根目录的配置 在PHP开发或者Java Web开发中,都有一个根目录来存储相应的静态文

Django基础--Django基本命令、路由配置系统(URLconf)、编写视图、Template、数据库与ORM

web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构. 使用框架可以帮你快速开发特定的系统. 简单地说,就是你用别人搭建好的舞台来做表演. 尝试搭建一个简单的web框架: 因为我们不希望接触到TCP连接.HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务. 这个接口就是WSGI:Web Server Gateway Interface. #---------------------myweb.py-------

WebApi初探之路由配置

本文介绍了ASP.NET Web API路由HTTP请求控制器. 如果你熟悉ASP.NET MVC,Web API路由是和MVC路由非常相似的.主要差别是Web API使用HTTP方法而不是URI路径来选择Action的.你也可以使用MVC的路由配置风格来配置Web API路由,当然本文不是来介绍ASP.NET MVC的. 路由表 在ASP.NET Web API,控制器是一种处理HTTP请求的类.控制器的公共方法被称为动作方法或简单的动作.当Web API框架接收请求时,它将请求发送到一个动作

Symfony路由配置教程已开课

Symfony框架路由请求流程 [录播]Symfony框架路由请求流程(5分钟) 第2节 Symfony路由配置的第一个例子 [录播]Symfony路由配置的第一个例子(20分钟) 第3节 Symfony基本的路由配置 [录播]Symfony路由配置的第一个例子(6分钟) 第4节 Symfony高级的路由配置 [录播]Symfony高级的路由配置(18分钟) 第5节 Symfony特殊路由参数 [录播]Symfony特殊路由参数(3分钟) 第6节 Symfony生成URL详解 [录播]Symfo

MVC框架-路由分发总结

原网址将会不断更新 :   作程的技术博客  <MVC框架-路由分发总结> it.zuocheng.net 路由的类型 Route Type 无路由 No Route HTTP请求直接定位到特定的脚本文件执行.比如http://domain/news/latest.php 动态路由 依据某种动态规则进行路由和分发,一般有如下形式: 强约束URL 将Class,function 等信息隐藏在url中,请求来时,依据规则解析URL就可以定位Action函数,比如http://domain/mode

零开始构建Angular项目----之路由配置 和 nav导航条

效果 接着上次 零开始构建Angular项目继续扯路由配置 和 nav导航条 1.增加about页面 about.component.html <!-- Docs nav ================================================== --> <div class="row"> <!-- <div class="col-md-3 "> <div class="bc-sid