Laravel MVC的基本流程

Laravel MVC框架

Java代码  

  1. http://www.golaravel.com/download/  

下载镜像优化版:基于Laravel 官方 GitHub 仓库源码的基础上安装了依赖库(vendor),页面打开巨慢的问题我们把所有引用的google字体全部删掉了等。

 

我们说说Laravel中Model,Controller,Views的工作流程,也就是下面这个顺序:

Java代码  

  1. 1.注册路由 ---> 2.创建控制器 ---> 3. 控制器中获取数据库数据 ---> 4.在视图中展示数据  

1注册路由,我们在app/Http/routes.php中注册了我们首页的路由:

Java代码  

  1. Route::get('/', 'ArticleController@index'); //首页  
  2. Route::get('articles/{id}', 'ArticleController@show'); //get路由  
  3. Route::post('article/update', 'ArticleController@update'); //post路由  
  4. Route::resource('photo', 'PhotoController'); //restful  

可以直接使用这个路由,所以我们可以进入下一步。

 

2创建控制器,创建控制器的时候你可以手动创建,不过还是推荐使用artisan这个命令行工具,在项目目录之下(项目中的artisan文件对应的目录),命令行执行:

Java代码  

  1. php artisan make:controller ArticleController --plain  
  2. //php artisan make:controller PhotoController --resource //5.2 restful  

这里需要说明的是--plain这个参数表明只要一个简单的controller,里面不需要生成一堆如show(),create()等方法。

3控制器中获取数据库数据

创建模型,首先我们要新建一张表来存储 Article,命令行运行

Java代码  

  1. php artisan make:model Models/Article  

成功以后,修改 migration 文件database/migrations/***_create_articles_table.php 的相应位置为:

Java代码  

  1. Schema::create('articles', function(Blueprint $table)  
  2. {  
  3.     $table->increments('id');  
  4.     $table->string('url')->comment('回调通知地址');  
  5.     $table->integer('times')->default(0)->index()->comment('通知次数');  
  6.     $table->string('params')->comment('通知参数');  
  7.     $table->tinyInteger('is_success')->default(0)->index()->comment('是否通知成功');  
  8.     $table->timestamps();  
  9. });  

之后运行:

Java代码  

  1. php artisan migrate  

去数据库里瞧瞧,articles 表已经躺在那儿啦。模型中加入

Java代码  

  1. <?php namespace App\Models;  
  2.   
  3. use Illuminate\Database\Eloquent\Model;  
  4.   
  5. class Article extends Model {  
  6.     protected $table = 'articles'; //添加数据库表名  
  7.     public $timestamps = false;  //关掉laravel内置时间戳  
  8. }  

 然后再调用模型

Java代码  

  1. class ArticleController extends Controller  
  2. {  
  3.     public function index()  
  4.     {  
  5.         $articles = Article::all();  
  6.         return $articles;  
  7.     }  
  8. }  

如果你直接返回查找到得数据,因为laravel可能是出于这样的考虑:一般这种情况下地返回,通常都是在创建api功能,比如你为你的一个手机App写的api一样,json数据无疑是很好的选择

 

在视图中展示数据

这里我们首先需要修改的是ArticleController中的index()方法:

Java代码  

  1. <?php  
  2. namespace App\Http\Controllers;  
  3.   
  4. use Illuminate\Http\Request;  
  5. use Illuminate\Routing\Controller; //不验证时使用 2选1  
  6. //use App\Http\Controllers\Controller; //use ValidatesRequests validate  
  7. class ArticleController extends Controller  
  8. {  
  9.     /** 
  10.      * 显示列表数据 
  11.      * 
  12.      * @param Request $request 
  13.      * @return Response 
  14.      */  
  15.     public function index(Request $request)  
  16.     {  
  17.         //$id = $request->input('id');  
  18.         $articles = Article::all();  
  19.         return view('articles.index', compact('articles'));  
  20.     }  
  21.   
  22.     /** 
  23.      * Update the specified article. 
  24.      * 
  25.      * @param  Request $request 
  26.      * @param  int $id 路由参数传入的输入数据,只需要将路由参数置于其他依赖之后 
  27.      * @return Response 
  28.      */  
  29.     public function update(Request $request, $id)  
  30.     {  
  31.     }  
  32. }  

我们只是修改了return这一行的代码,使用view()方法加载视图,这个视图就是位于resources/views/articles/中的index.blade.php(用的是blade模板引擎),最后使用compact('articles')将数据传给视图文件。

 

路由直接访问view

Java代码  

  1. Route::get('/', function () {  
  2.     return view('welcome');  
  3. });  

当用户发送一个get请求访问我们站点的根目录的时候,直接访问这个试图文件位于resources/views/welcome.blade.php

 

laravel项目下面有4个文件夹:appbootstrappublicvendor,这4个文件夹下面又有很多个子文件夹,当你第一次看到这么丰富的文件夹内容时,是不是觉得很有压力?没关系,我们会逐一的来了解不同的文件夹。

  1. app 包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这个目录里。
  2. bootstrap 用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。
  3. public 这个文件夹是唯一外界可以看到的web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等
  4. vender 包含Composer命令相关管理文件,包含了许多PHP相关的app应用程序

laravel 获取最后一条sql的小函数,放在第三方函数库里面就行了

Java代码  

  1. function lastSql()  
  2. {  
  3.     $queries = DB::getQueryLog();  
  4.     $a = end($queries);  
  5.     $tmp = str_replace('?', '"' . '%s' . '"', $a["query"]);  
  6.     return vsprintf($tmp, $a['bindings']);  
  7. }  

方法欺骗:让HTML表单实现RESTFUL

HTML表单没有支持 PUT 、PATCH 或 DELETE 请求。所以当定义 PUT 、PATCH 以及 DELETE 路由并在 HTML 表单中被调用的时候,您将需要添加隐藏 _method 字段在表单中。发送的 _method 字段对应的值会被当做HTTP请求方法。举例来说:

Java代码  

  1. <form action="/foo/bar" method="POST">  
  2.     <input type="hidden" name="_method" value="PUT">  
  3.     <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">  
  4. </form>  

运行php artisan key:generate;前提是你项目根目录下有个.env文件.然后把根路径下的.env.example的内容复制进去,再运行 php artisan key:generate

测试在项目根目录下简单运行 phpunit 命令即可

Middleware是原来的路由filter的一个升级版,现在不用在filters.php里定义过滤器,取而代之的是在 Middleware目录中创建类,并在Kernel.php中配置全局还是可选,全局的Middleware在每个请求都会执行,而可选的就相当于原来的filter,可以在路由中使用,也可以在控制器中使用。

Laravel5常用的包 github.com

Java代码  

  1. illuminate/html  
  2. nonfu/awesome-laravel //github Laravel精选资源大全  
  3. mccool/laravel-auto-presenter //MVP模式  
  4. swiggles/laravel-memcache //memcache扩展  
  5. Xethron/migrations-generator //从现有数据库生成表迁移,包括索引和外键!  
  6. nWidart/DbExporter //整个数据库生成迁移,包括数据  

 

时间: 2024-10-05 17:34:16

Laravel MVC的基本流程的相关文章

asp.net MVC 的处理流程

之前把笔记都放在空间日志中隐藏起来,今天看到这句话:作为经常从网上索取免费资料的一员,要有回报的思想,也为了让更多的人少走些弯路,想想自己不能这么自私,所以把空间日志搬到博客园来.闲话不说,直接开始.    asp.net MVC 分为主要的Controller .Action.以及Views 下面来分析Asp.net MVC的处理流程: Controller 负责将获取Model数据并将Model传递个View对象,通知View对象显示. 处理流程: 1.用户发起请求--->UrlRoutin

请问一个关于MVC+EF开发流程的问题。

问题描述 请教一下,大家MVC+EF开发.CodeFirst.ModelFirst的程序代码,是手写的还是用工具生成的?大家MVC+EF开发开发的具体流程是什么样的?Asp.net技术论坛: 解决方案 本帖最后由 aspx1001 于 2011-12-15 11:01:08 编辑解决方案二:EF是神马啊解决方案三:引用1楼jypcxgzl的回复: EF是神马啊 EntityFramework解决方案四:codefirst是手写实体类生成数据库.modelfirst和dbfirst都用自带的吧.解

轻松学MVC4.0–6 MVC的执行流程

原文 http://www.cnblogs.com/ybst/archive/2012/11/02/2750700.html   MVC在底层和传统的asp.net是一致的,在底层之上,相关流程如下: 1)Global.asax里,MvcApplication对象的Application_Start()事件中,调用 RouteConfig.RegisterRoutes(RouteTable.Routes); 来注册路由规则. 2)RouteConfig.RegisterRoutes()方法里,给

新手学Struts(一)----JSP+Servlet讲解MVC实现原理

MVC基本原理 一个简单的例子 改良的例子 Struts基本流程的实现     最近在学SSH(Struts+ Hibernate+Spring),这也算是一个比较经典的框架了,之前都是看人家大牛说这个框架,那个框架,说的真溜,自己也是佩服的五体投地啊~~     现在开始自己也要捣鼓捣鼓这些东西,还是有点小激动哒~~,Struts是基于MVC框架实现的,今天主要讲讲Struts的实现过程. MVC基本原理     MVC框架,相信大家也都已经耳熟蓝(能)翔(详)了! 1.终端接受到用户的请求,

php实现最简单的MVC框架实例教程

 首先,在学习一个框架之前,基本上我们都需要知道什么是mvc,即model-view-control,说白了就是数据控制以及页面的分离实现,mvc就是这样应运而生的,mvc分为了三个层次,而且三个层次各司其职,互不干扰,首先简单介绍下,各个层次:view即是视图,也就是web页面,control即是控制器 向系统发出指令的工具,model 简单说是从数据库中取出数据进行处理. MVC的工作流程如下: 1. 浏览者->调用控制器,对此发出指令 2. 控制器->按指令选取一个合适的模型 3. 模型

通过一个模拟程序让你明白WCF大致的执行流程

在<通过一个模拟程序让你明白ASP.NET MVC是如何运行的>一文中我通过一个普通的ASP.NET Web程序模拟了ASP.NET MVC的执行流程,现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序.[源代码从这里下载] 目录 一.基本的组件和执行流程 二.创建自定义HttpHandler实现对服务调用请求的处理 三.定义创建WCF组件的工厂 四.定义HttpModule映射WcfHandler 五.创建自定义的真实代理实现服务的调用 六.定义服务代理工厂 七.服

asp.net的MVC编程、MV编程以及URL重写

 前一段时间做一个网站项目,使用win2003+.net2.0开发:在学习了一些.net的相关知识后,并考虑到此项目需要多人合作,以及架构清晰.URL重写等优点,决定用MVC方式开发.但微软的.net MVC框架据说要下半年才出正式版,而且还需要.net3.5,其他的MVC框架又不熟悉,估计也需要一段时间学习.由于开发时间比较紧,我们开发小组中也没有一个对.net及.net MVC框架非常熟悉的人,所以又想转回使用传统的.net编程方式开发. 在两难之际,我想也许可以在项目需求出来前,自己试着写

ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个系列,可能要很长时间吧,但是我肯定会一直坚持,如果我哪里写的不好欢迎大家指出我们共同学习,而且我理解的也不是很透彻,所以我想在写这样一遍

MVC, MVP, MVVM比较以及区别(上)

原文:MVC, MVP, MVVM比较以及区别(上) MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下对于这三种模式思想的理解,以及它们的区别.欢迎各位高手拍砖. 阅读目录: 一. MVC, MVP, MVVM诞生的需求? 二. 一段典型的耦合代码 三. MVC模式      3.1 主动MVC      3.2 被动MVC      3.3 W