Laravel5.0学习02 实例进阶
本文以laravel5.0.22为例。
本节以新建一个简单的博客作为实例。
准备工作
数据库配置
.env文件(也可以直接修改config/database.php)
DB_HOST=localhostDB_DATABASE=myblogDB_USERNAME=rootDB_PASSWORD=123456
数据库表:
CREATE TABLE `blog` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL DEFAULT '0', `title` varchar(50) NOT NULL DEFAULT '', `content` text NOT NULL, `flag` tinyint(2) NOT NULL DEFAULT '1', `create_time` int(11) NOT NULL DEFAULT '0', `update_time` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
开始
这里暂时不使用Eloquent ORM,直接使用DB类。
控制器
新建一个控制器:app/Http/Controllers/BlogController.php
<?phpnamespace App\Http\Controllers;use Illuminate\Support\Facades\DB;/** * * @author YJC * */class BlogController extends Controller{ public function index() { $list = DB::table('blog')->get(); //需要return return view('blog.index', ['list' => $list]); }}
视图
新建一个母版视图:resources/views/blog/layout.blade.php
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Laravel</title> <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"></head><body> @yield('content') <!-- Scripts --> <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script></body></html>
新建一个普通视图:resources/views/blog/index.blade.php
@extends('blog.layout')@section('content') @foreach($list as $blog) <div> <h1 id="blog-title">{{$blog->title}}</h1> <p>{{$blog->content}}</p> </div> @endforeach@endsection
路由
Route::get('blog', 'BlogController@index');
访问
http://localhost/laravel5/public/index.php/blog
即可。
路由技巧
默认的,每新增一个方法,需要写一条路由,比较繁琐。Laravel支持针对一个控制器里所有方法仅写一条路由。需要遵循的规则是:
1) 控制器里方法必须以get、post开头。
2) Route::get()改成Route::controller()。
示例:上面的index方法我们需要改成getIndex,路由这样写:
Route::controller('blog', 'BlogController');
这样,Blog控制器所有的方法都能被路由匹配。例如,有如下方法:
public function getIndex(){}public function getDetail(){}public function postAdd(){}
都可以被匹配。访问的时候直接:
http://localhost/laravel5/public/index.php/blog/indexhttp://localhost/laravel5/public/index.php/blog/detail/2http://localhost/laravel5/public/index.php/blog/add
新增文章详情页
控制器新增getDetail()方法:
public function getDetail($id) { $blog = DB::table('blog')->find($id); return view('blog.detail', ['blog' => $blog]);}
更改index.blade.php:
@extends('blog.layout')@section('content') @foreach($list as $blog) <div> <h1 id="a-href-url-blog-detail-blog-id-blog-title-a"><a href="{{url('blog/detail/'.$blog->id)}}">{{$blog->title}}</a></h1> <p>{{$blog->content}}</p> </div> @endforeach @endsection
新增文章详情试图页detail.blade.php:
@extends('blog.layout')@section('content') <div class="jumbotron"> <h1 id="blog-title">{{$blog->title}}</h1> <p>{{$blog->content}}</p> </div>@endsection
更改路由:
//对应blog/indexRoute::get('blog', 'BlogController@index'); //对应blog里任何方法,注意方法要加get或者postRoute::controller('blog', 'BlogController');
使用Eloquent ORM
上面我们一直用的是DB类。接下来我们将使用Eloquent ORM代替DB类。
Laravel 的 Eloquent ORM 提供了更优雅的ActiveRecord 实现来和数据库的互动。 每个数据库表对应一个模型文件。
模型(Model)
在app下新建Blog.php:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;/** * @author YJC * */class Blog extends Model{ //指定表名,不指定系统会默认自动对应名称为「类名称的小写复数形态」的数据库表 protected $table = 'blog'; //指定主键,默认就是id protected $primaryKey = 'id'; //默认情况下,在数据库表里需要有 updated_at 和 created_at 两个字段。如果您不想设定或自动更新这两个字段,则将类里的 $timestamps 属性设为 false即可 public $timestamps = false; }
提示:所有DB类里查询构造器里的方法,查询 Eloquent 模型时也可以使用。
控制器里使用模型
复制BlogController.php为BlogController.php.bak,清空原BlogController.php里面内容,改为如下内容:
<?phpnamespace App\Http\Controllers;//需要use模型use App\Blog;/** * * @author YJC * */class BlogController extends Controller{ public function index() { $list = Blog::all(); return view('blog.index', ['list' => $list]); } public function getDetail($id) { $blog = Blog::find($id); return view('blog.detail', ['blog' => $blog]); }}
Eloquent ORM提供了很多易用的方法来操作数据库。例如:
在Blog.php模型文件里,我们可以使用以下查询方法(Eloquent ORM同时支持$this和静态方式调用):
//取出所有记录,all()得出的是对象集合,可以遍历$this->all()->toArray();//根据主键取出一条数据$one = $this->find('2');return array( $one->id, $one->title, $one->content,);//查找id=2的第一条数据$this->where('id', 2)->first()->toArray();//查找id>0的所有数据$this->where('id', '>', '0')->get()->toArray();//查找id>0的所有数据,降序排列$this->where('id', '>', '0')->orderBy('id', 'desc')->get()->toArray();//查找id>0的所有数据,降序排列,计数$this->where('id', '>', '0')->orderBy('id', 'desc')->count();//offset,limit$this->where('id', '>', '0')->orderBy($order[0], $order[1])->skip($offset)->take($limit);//等同于$this->where('id', '>', '0')->orderBy($order[0], $order[1])->offset($offset)->limit($limit);
更多操作方法详见:http://www.golaravel.com/laravel/docs/5.0/eloquent/
访问http://localhost/laravel5/public/index.php/blog页面看看吧!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...
