Laravel MVC框架
http://laravelacademy.org/resources-download
下载镜像优化版:基于Laravel 官方 GitHub 仓库源码的基础上安装了依赖库(vendor),页面打开巨慢的问题我们把所有引用的google字体全部删掉了等。
我们说说Laravel中Model,Controller,Views的工作流程,也就是下面这个顺序:
1.注册路由 ---> 2.创建控制器 ---> 3. 控制器中获取数据库数据 ---> 4.在视图中展示数据
1注册路由,我们在app/Http/routes.php
中注册了我们首页的路由:
Route::get('/', 'ArticleController@index'); //首页 Route::get('articles/{id}', 'ArticleController@show'); //get路由 Route::post('article/update', 'ArticleController@update'); //post路由 Route::resource('photo', 'PhotoController'); //restful
可以直接使用这个路由,所以我们可以进入下一步。
2创建控制器,创建控制器的时候你可以手动创建,不过还是推荐使用artisan这个命令行工具,在项目目录之下(项目中的artisan文件对应的目录),命令行执行:
php artisan make:controller ArticleController --plain //php artisan make:controller PhotoController --resource //5.2 restful
这里需要说明的是--plain
这个参数表明只要一个简单的controller,里面不需要生成一堆如show()
,create()
等方法。
3控制器中获取数据库数据
创建模型,首先我们要新建一张表来存储 Article,命令行运行
php artisan make:model Models/Article
成功以后,修改 migration 文件database/migrations/***_create_articles_table.php 的相应位置为:
Schema::create('articles', function(Blueprint $table) { $table->increments('id'); $table->string('url')->comment('回调通知地址'); $table->integer('times')->default(0)->index()->comment('通知次数'); $table->string('params')->comment('通知参数'); $table->tinyInteger('is_success')->default(0)->index()->comment('是否通知成功'); $table->timestamps(); });
之后运行:
php artisan migrate在laravel框架ORM模型中默认会有三个时间字段,created_at,updated_at,deleted_at,这三个时间字段是框架默认操作,不用另加代码去处理,非赏方便:
ORM模型会自动添加上create_at字段但写入当前时间,而不用我们自己去添加这个字段,在修改时会加上updated_at,默认情况下,Eloquent期望created_at和updated_at已经存在于数据表中,如果你不想要这些Laravel自动管理的列,在模型类中设置$timestamps属性为false.当使用软删除时,框架不会直接删除数据库里的数据,而是直接写deleted_at指定当前删除时间.如果我们想修改这三个字段的名称可以在对应的MODEL类中添加以下代码
const DELETED_AT='delete_at'; const UPDATED_AT='update_at'; const CREATED_AT = 'create_at';去数据库里瞧瞧,articles 表已经躺在那儿啦。模型中加入
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $table = 'articles'; //添加数据库表名 public $timestamps = false; //关掉laravel内置时间戳 }然后再调用模型
class ArticleController extends Controller { public function index() { $articles = Article::all(); return $articles; } }
如果你直接返回查找到得数据,因为laravel可能是出于这样的考虑:一般这种情况下地返回,通常都是在创建api功能,比如你为你的一个手机App写的api一样,json数据无疑是很好的选择
在视图中展示数据
这里我们首先需要修改的是ArticleController
中的index()
方法:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller; //不验证时使用 2选1 //use App\Http\Controllers\Controller; //use ValidatesRequests validate class ArticleController extends Controller { /** * 显示列表数据 * * @param Request $request * @return Response */ public function index(Request $request) { //$id = $request->input('id'); $articles = Article::all(); return view('articles.index', compact('articles')); } /** * Update the specified article. * * @param Request $request * @param int $id 路由参数传入的输入数据,只需要将路由参数置于其他依赖之后 * @return Response */ public function update(Request $request, $id) { } }
我们只是修改了return这一行的代码,使用view()
方法加载视图,这个视图就是位于resources/views/articles/
中的index.blade.php(
用的是blade模板引擎)
,最后使用compact('articles')
将数据传给视图文件。
路由直接访问view
Route::get('/', function () { return view('welcome'); });
当用户发送一个get请求访问我们站点的根目录的时候,直接访问这个试图文件位于resources/views/welcome.blade.php
app
、
bootstrap
、
public
、
vendor
,这4个文件夹下面又有很多个子文件夹,当你第一次看到这么丰富的文件夹内容时,是不是觉得很有压力?没关系,我们会逐一的来了解不同的文件夹。
-
app
包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这个目录里。 -
bootstrap
用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。 -
public
这个文件夹是唯一外界可以看到的web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等 -
vender
包含Composer命令相关管理文件,包含了许多PHP相关的app应用程序
项目给写权限
chmod -R 777 bootstrap/cache chmod -R 777 storage开启错误日志:.env 打开 debug,在app/storage/logs/laravel.log中找到具体错误
laravel 获取最后一条sql的小函数,放在第三方函数库里面就行了
function lastSql() { $queries = DB::getQueryLog(); $a = end($queries); $tmp = str_replace('?', '"' . '%s' . '"', $a["query"]); return vsprintf($tmp, $a['bindings']); }
方法欺骗:让HTML表单实现RESTFUL
HTML表单没有支持 PUT 、PATCH 或 DELETE 请求。所以当定义 PUT 、PATCH 以及 DELETE 路由并在 HTML 表单中被调用的时候,您将需要添加隐藏 _method 字段在表单中。发送的 _method 字段对应的值会被当做HTTP请求方法。举例来说:
<form action="/foo/bar" method="POST"> <input type="hidden" name="_method" value="PUT"> <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> </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
illuminate/html nonfu/awesome-laravel //github Laravel精选资源大全 mccool/laravel-auto-presenter //MVP模式 swiggles/laravel-memcache //memcache扩展 Xethron/migrations-generator //从现有数据库生成表迁移,包括索引和外键! nWidart/DbExporter //整个数据库生成迁移,包括数据