laravel 路由使用(二)

我们在第一篇文章已经描述了在laravel中一些简单路由的使用.

那么我们来回顾一下

1,基础路由

2,多请求路由

3,路由传递参数

4,路由限制

5,控制器路由

有了第一篇文章的基础之后呢,我们可以学习以下的知识点

但是,经过上篇文章呢,可能会有的人有意见,为什么呢?

关于laravel的路由定义,很多人看到后有一个疑惑:

每条地址规则都要定义路由,岂不是很累?

这个问题确实是个问题,不过,laravel给了我们一个折中的方案----资源路由。

资源路由

控制器路由我认为主要是解决路由定义繁杂的情况,因为大型的应用业务复杂,控制器相当的多,我们不可能每一个控制器的方法都要定义一个路由。所以呢资源路由可以帮助我们完美的解决问题.但是在解决问题之前呢,我们先了解一下资源路由,何为资源呢(RESTful);

RESTful是一种设计思想、一种普遍接受的规范。

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的
作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联
网开发产生了深远的影响。
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩
写。我对这个词组的翻译是"表现层状态转化"。
如果一个架构符合REST原则,就称它为RESTful架构。
要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什
么意思,它的每一个词代表了什么涵义。如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设
计。
大家一定要阅读该文章,理解RESTful架构,文章十分清晰的讲述了RESTful,本文就不再重复熬述。

Laravel 的资源控制器使得构建围绕资源的 RESTful 控制器变得毫无痛苦,例如,你可能想要在应用中创建一个控制器,用于处理关于图片存储的 HTTP 请求,使用 Artisan 命令 make:controller ,我们可以快速创建这样的控制器:

当然后面呢我们会详细给大家说一下artisan工具的使用

php artisan make:controller PhotoController

该 Artisan 命令将会生成一个控制器文件 app/Http/Controllers/PhotoController.php ,这个控制器包含了每一

个资源操作对应的方法。 接下来,可以为该控制器注册一个资源路由:

Route::resource(‘photo‘, ‘PhotoController‘);

这个路由声明包含了处理图片资源 RESTful 动作的多个路由,相应地,Artisan 生成的控制器也已经为这些动作设置了对应的处理方法。

我们可以打开cmd命令行,来到我们放置laravel框架的根目录输入php artisan route:list会显示我们的路由信息,包括每条路由相应的请求方式呢,如下:

同样的来的呢我们的控制器下,可以看见准备好了各种方法,和上图呢相对应,从这样看呢,资源路由能够避免我们担心的那种情况呢.

同样呢我们还可以通过资源路由呢来定义部分资源如:

定义部分资源路由

Route::resource(‘photo‘, ‘PhotoController‘,
[‘only‘ => [‘index‘, ‘show‘]]);

这样的意思呢是在PhotoController控制器中呢去使用index和show方法

我们还可以这样去定义与上述的结果一样
Route::resource(‘photo‘, ‘PhotoController‘,
[‘except‘ => [‘create‘, ‘store‘, ‘update‘, ‘destroy‘]]);

只不过是only和except要表达的意思

命名资源路由

默认情况下,所有资源控制器动作都有一个路由名称,然而,我们可以通过传入 names 数组来覆盖这些默认的名字:

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

上述呢都是资源路由那么刚接触laravel框架的可能还不大理解,没有关系,可以直接跳过这个部分来学习下面的,回头再来看这个

路由分组

比如一条非常简单的控制器路由:

Route::get(‘admin/login‘,‘Admin\[email protected]‘);

这条路由的意思呢我们可以访问http://www.itbool.com/admin/login可以访问Admin模块下的UserController控制器中的getLogin方法,这个呢大家都可以通过第一篇文章来理解.

那么何为路由分组呢??

比如我要在Admin模块下写注册登录和退出页面,那么考虑访问方式的话我们需要些以下路由:

Route::get(‘admin/login‘,‘Admin\[email protected]‘);
Route::post(‘admin/login‘,‘Admin\[email protected]‘);
Route::get(‘admin/register‘,‘Admin\[email protected]‘);
Route::get(‘admin/register‘,‘Admin\[email protected]‘);
Route::get(‘admin/logout‘,‘Admin\[email protected]‘);

这样看的话我们书写的代码量很多,并且有很多相同的地方,那么怎么样解决呢?很简单,路由分组

首先我们注意:action admin/login   admin是路由前缀 prefix去表示

再次注意

Admin\UserController   Admin是控制器的命名空间,用namespace去表示,我们可不可以直接把这些相同的东西给省略掉呢,答案是可以的

那么分组下来就是:

Route::group([‘prefix‘=>‘admin‘,‘namespace=>Admin‘],function(){
	Route::get(‘login‘,‘[email protected]‘);
	Route::post(‘login‘,‘[email protected]‘);
	Route::get(‘register‘,‘[email protected]‘);
	Route::get(‘register‘,‘[email protected]‘);
	Route::get(‘logout‘,‘[email protected]‘);
});

看到这个结果,是不是很惊讶呢?只不过是把它的路由前缀和命名空间给声明一下,这样大家是不是就理解了呢?

相信了解数据库的同学可以知道,在数据库中的表前缀是可以指定的,意思是一样的

命名路由

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

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

上述呢是用匿名函数去相应,那么在控制器中如何使用呢:

Route::get(‘user/profile‘, [
‘as‘ => ‘profile‘, ‘uses‘ => ‘[email protected]‘
]);

路由分组 & 命名路由

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

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

那么在laravel框架中呢,路由就是这样的,通过第一篇和第二篇laravel中的路由大家基本可以掌握了

时间: 2024-12-06 02:18:49

laravel 路由使用(二)的相关文章

laravel路由基础

基础: 所有的laravel路由都定义在 app/Http/routes.php 这个文件里,会被框架自带加载.简单的路由会接受一个URI和一个Closure类. Route::get('foo', function () { return 'Hello World'; }); 默认的routes.php 是被RouteServiceProvider所加载进入框架的,允许自定义路由和响应 Route::get($uri, $callback); Route::post($uri, $callba

原来 laravel 路由 参数可以为可选。。。 很灵活

基本路由 您的应用程序的绝大多数路由将在 app/routes.php 文件中定义.Laravel 中最简单的路由由一个 URI 和一个闭包调用组成. 基本 GET 路由 复制代码代码如下: Route::get('/', function(){return 'Hello World';}); 基本 POST 路由 复制代码代码如下: Route::post('foo/bar', function(){return 'Hello World';}); 注册一个路由以响应所有 HTTP 方法 复制

laravel 路由修改不起作用解决方案

起由:今天帮朋友解决了下bug,bug就是它使用laravel时候,怎样修改路由文件,都没有发生变化,但是故意在routes.php中增加语法错误时又具有错误,因此想到了可能是这个项目使用的laravel的路由缓存,而且其路由文件中就有很多很多的路由,因此更加断定项目使用了路由缓存. 解决方案:每次在修改路由文件的时候,在项目中打开命令行,执行php artisan route:cache进行重新缓存,这样修改的路由文件才可以起作用 laravel路由缓存的优点: 当路由定义特别多的时候,每次进

laravel路由无法访问,报404,No query results for model [App\Models\...]

今天遇到了一个问题,在routes/web.php中配置了路由,但始终无法访问该路由,一直报404. Route::resource('gift_packs', 'GiftPacksController', ['only' => ['index', 'show', 'create', 'store', 'update', 'edit', 'destroy']]); Route::get('gift_packs/test', '[email protected]')->name('gift_pa

Laravel 5.2 二、HTTP(高级)路由与创建控制器

1.HTTP路由 参照文档,所有路由都定义在 App\Providers\RouteServiceProvider 类载入的 app/Http/routes.php文件中. 1.1基本路由 Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Rout

Laravel —— 路由问题

在 Laravel 中,路由是项目的起点. 下面总结一些路由中常见的问题. 一.路由 404 是因为配置文件没有开启重定向模块,可以通过下面的操作解决. 1.php.ini 开启 openssl 模块: 2.httpd.conf 开启 rewrite_module 模块: 3.设置 AllowOverride <Directory "c:/Apache24/htdocs"> Options Indexes FollowSymLinks AllowOverride All R

路由知识二

vue-router是一个插件包,所以我们还是需要用npm/cnpm来进行安装的:npm/cnpm install vue-router --save-dev. 在路由的核心文件:src/router/index.js分析: import Vue from 'vue' //引入Vue import Router from 'vue-router' //引入vue-router import Hello from '@/components/Hello' //引入根目录下的Hello.vue组件

WPF路由事件二:路由事件的三种策略

一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实现一个操作,执行整个事件的调用则需要执行代码将事件串联起来). 路由事件的路由策略: 所谓的路由策略就是指:路由事件实现遍历元素的方式. 路由事件一般使用以下三

Laravel 路由(一)

参考:http://laravelacademy.org/post/398.html 以下代码在:laravel文件夹/app/Http/routes.php文件中更改填写 1.路由 GET 请求 格式: Route::get('请求页面',function(){ return 返回值; }); 示例: Route::get('/hello',function(){ return "Hello Laravel[GET]!"; }); 2.路由 POST 请求 格式: Route::po