0

0

Laravel5.0学习01 入门

php中文网

php中文网

发布时间:2016-06-23 13:14:24

|

1271人浏览过

|

来源于php中文网

原创

本文以laravel5.0.22为例。

环境需求

Laravel5.0 框架有一些系统上的需求:

PHP 版本 >= 5.4
Mcrypt PHP 扩展
OpenSSL PHP 扩展
Mbstring PHP 扩展
Tokenizer PHP 扩展

在 PHP 5.5 之后, 有些操作系统需要手动安装 PHP JSON 扩展包。如果你是使用 Ubuntu,可以通过 apt-get install php5-json 来进行安装。

我该使用Laravel吗

来自知乎网友的讨论:PHP框架Laravel还是Codeigniter? https://www.zhihu.com/question/21617669

CI比较接近原生的PHP,在原有PHP代码的基础上封装了很多类,因为它架构简单,所以容易扩展。从另一个角度来看,也就是没啥架构,最最原始的三层架构。

Laravel 简直就是一次创新,大量吸收了Java,RoR等其他框架的精华,在架构方面,已基本做到现有Php框架最佳,扩展性,伸缩性强大得一塌糊涂,非常适合团队作战。

对于新手来说,Laravel初看上去不太像Php的原本写法了,所谓优雅,就是你光凭代码就可以知道意思,而不用读注释,代码精简复用度非常高;Laravel开发人员都是PHP圈子最顶尖的高手,他们习惯用新的技术和架构,即便如此,Laravel其实上手并不难,一旦以你掌握了它的大致要点后,你会逐渐发现它在每一个方面都全面超越CI,且实用性非常高。(来源:知乎)

简单建议:
如果是个人项目,旨在研究,推荐Laravel;如果是外包或者公司项目,推荐Codeigniter或者ThinkPHP。

特点

RESTful Routing ;
设计精妙的 Blade 模板引擎, 轻快, 不失灵活 ;
合理的 ORM model 层, Eloquent ORM , 借鉴于 Rails 的成功;
migration 数据库版本系统 和 seeding ;
使用包管理器 Composer , 打开了一扇开往春天的门;
强调测试驱动, 整个核心经受过完整的测试, 高质量的代码;
命令行驱动, 可以做到高度自动化 (讲究效率, 代码生成器...) , 借鉴与 rails ;
合理使用 PHP 的新版本特性, 让写代码更加有乐趣, 跟上时代的步伐;
积极向上的社区, 这个很重要呀, 大家都在学习着, 创造着好的工具, 加快开发速度, 提高编程效率, 接受新知识的速度也很快.
对 php 标准化的支持 PHP-FIG — PHP Framework Interop Group

更多阅读:
1、最好的 PHP 框架是什么?为什么? - Charlie Jade 的回答 - 知乎
https://www.zhihu.com/question/19558755/answer/23062110

2、php - Laravel框架相对于其他框架比如CI、TP、Symfony等的优势是什么? - SegmentFault
https://segmentfault.com/q/1010000000489103

安装

很多人会卡在这一步。要么是不会Composer,要么就是无法使用Composer安装。

如果还不知道Composer,先去学习了解了解:

1、Packagist / Composer 中国全量镜像
http://pkg.phpcomposer.com/
2、Composer 中文网
http://www.phpcomposer.com/

如果无法使用用Composer安装,很有可能是仓库访问不了,即被墙了。先更新Composer仓库源:

# 修改 composer 的全局配置文件(推荐方式)# 打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:composer config -g repo.packagist composer https://packagist.phpcomposer.com

接下来正式开始安装吧!
这里以Laravel 5.0 版本为例(PHP 版本 >= 5.4)。5.1 版本去掉了本系列教程主要讲解的元素(Auth 系统),不建议使用 5.1 来学习。

# 指定5.0.22版本,项目目录是learnlaravel5composer create-project laravel/laravel learnlaravel5 5.0.22

等待安装(需要5分钟左右):

Installing laravel/laravel (v5.0.22)  - Installing laravel/laravel (v5.0.22)    Downloading: 100%Created project in learnlaravel5Loading composer repositories with package informationInstalling dependencies (including require-dev) from lock file  - Installing jakub-onderka/php-console-color (0.1)    Downloading: 100%  - Installing vlucas/phpdotenv (v1.1.0)    Downloading: 100%  - Installing symfony/var-dumper (v2.6.4)    Downloading: 100%  - Installing symfony/translation (v2.6.4)    Downloading: 100%  - Installing symfony/security-core (v2.6.4)    Downloading: 100%  - Installing symfony/routing (v2.6.4)    Downloading: 100%  - Installing symfony/process (v2.6.4)    Downloading: 100%  - Installing symfony/http-foundation (v2.6.4)    Downloading: 100%  - Installing symfony/event-dispatcher (v2.6.4)    Downloading: 100%  - Installing psr/log (1.0.0)    Downloading: 100%  - Installing symfony/debug (v2.6.4)    Downloading: 100%  - Installing symfony/http-kernel (v2.6.4)    Downloading: 100%  - Installing symfony/finder (v2.6.4)    Downloading: 100%  - Installing symfony/console (v2.6.4)    Downloading: 100%  - Installing swiftmailer/swiftmailer (v5.3.1)    Downloading: 100%  - Installing nikic/php-parser (v1.1.0)    Downloading: 100%  - Installing jakub-onderka/php-console-highlighter (v0.3.1)    Downloading: 100%  - Installing dnoegel/php-xdg-base-dir (0.1)    Downloading: 100%  - Installing psy/psysh (v0.4.1)    Downloading: 100%  - Installing nesbot/carbon (1.17.0)    Downloading: 100%  - Installing mtdowling/cron-expression (v1.0.4)    Downloading: 100%  - Installing monolog/monolog (1.13.1)    Downloading: 100%  - Installing league/flysystem (1.0.2)    Downloading: 100%  - Installing jeremeamia/superclosure (2.1.0)    Downloading: 100%  - Installing ircmaxell/password-compat (v1.0.4)    Downloading: 100%  - Installing doctrine/inflector (v1.0.1)    Downloading: 100%  - Installing danielstjules/stringy (1.9.0)    Downloading: 100%  - Installing symfony/filesystem (v2.6.4)    Downloading: 100%  - Installing classpreloader/classpreloader (1.2.0)    Downloading: 100%  - Installing laravel/framework (v5.0.16)    Downloading: 100%  - Installing phpdocumentor/reflection-docblock (2.0.4)    Downloading: 100%  - Installing symfony/yaml (v2.6.4)    Downloading: 100%  - Installing sebastian/recursion-context (1.0.0)    Downloading: 100%  - Installing sebastian/exporter (1.2.0)    Downloading: 100%  - Installing doctrine/instantiator (1.0.4)    Downloading: 100%  - Installing phpspec/prophecy (v1.3.1)    Downloading: 100%  - Installing phpspec/php-diff (v1.0.2)    Downloading: 100%  - Installing phpspec/phpspec (2.1.1)    Downloading: 100%  - Installing phpunit/php-token-stream (1.4.0)    Downloading: 100%  - Installing sebastian/version (1.0.4)    Downloading: 100%  - Installing sebastian/global-state (1.0.0)    Downloading: 100%  - Installing sebastian/environment (1.2.1)    Downloading: 100%  - Installing sebastian/diff (1.2.0)    Downloading: 100%  - Installing sebastian/comparator (1.1.1)    Downloading: 100%  - Installing phpunit/php-text-template (1.2.0)    Downloading: 100%  - Installing phpunit/phpunit-mock-objects (2.3.0)    Downloading: 100%  - Installing phpunit/php-timer (1.0.5)    Downloading: 100%  - Installing phpunit/php-file-iterator (1.3.4)    Downloading: 100%  - Installing phpunit/php-code-coverage (2.0.15)    Downloading: 100%  - Installing phpunit/phpunit (4.5.0)    Downloading: 100%...Generating autoload files> php artisan clear-compiled> php artisan optimizeGenerating optimized class loaderCompiling common classes> php -r "copy('.env.example', '.env');"> php artisan key:generateApplication key [4FunRLeVWE0jc6QTs3h8vNbDnoa4Qi8Q] set successfully.

安装完便可以访问了:

http://localhost/laravel5/public/index.php

项目结构

app|---Commands|---Console|---Events|---Exceptions|---Handlers|---Http    |---Controllers 控制器    |---Middleware 中间件    |---Requests 请求    |---routes.php 路由|---Providers|---Services|---User.php 模型文件bootstrapconfigdatabasepublicresources|---lang|---views 视图    |---welcome.blade.php    |---home.blade.phpstorage|---logstestsvendor.envartisancomposer.jsonserver.php

Laravel 框架有一个目录需要额外配置权限:storage 和 vendor 目录要让服务器有写入的权限。

路由(Route)

路由文件在:app/Http/routes.php。

默认的配置:

Route::get('/', 'WelcomeController@index');//匹配根目录到WelcomeController/indexRoute::get('home', 'HomeController@index');//匹配home到HomeController/index//路由组Route::controllers([    'auth' => 'Auth\AuthController',    'password' => 'Auth\PasswordController',]);

控制器(Controllers)

控制器路径:app/Http/Controllers。
示例:WelcomeController.php

<?php namespace App\Http\Controllers;class WelcomeController extends Controller {    public function index()    {        return view('welcome');    }}

继承自根控制器:Controller.php

<?php namespace App\Http\Controllers;use Illuminate\Foundation\Bus\DispatchesCommands;use Illuminate\Routing\Controller as BaseController;use Illuminate\Foundation\Validation\ValidatesRequests;abstract class Controller extends BaseController {    use DispatchesCommands, ValidatesRequests;}

生成url

url()方法可以生成符合规范的url。

echo url('greeting');//输出:http://localhost/laravel5/public/index.php/greeting

配置

配置文件:.env,包含了数据库和MAIL等配置。
config目录下也有相关配置。

模型(Model)

与Laravel4系列不同,旧的 app/models 目录已经完全被移除。相对的,Laravel5模型文件都放在 app 目录下,以及默认使用 App 命名空间。

示例:Blog.php

<?php namespace App;use Illuminate\Database\Eloquent\Model;class Blog extends Model {    public function listAll(){        return $this->all();    }}

视图(views)

视图根路径:resources/views。

我的小书坊源码(三层实现)
我的小书坊源码(三层实现)

可以实现用户的在线注册、登陆后可以添加图书、购买图书,可以对图书类别、出版社、价格等进行饼图分析默认帐号/密码:51aspx/51aspx该系统采用三层接口开发,App_Code下为三层结构的代码文件,适合三层入门者学习使用数据绑定控件使用的是GridView,顶部公用文件采用了UserControl用户控件调用DB_51aspx下为Sql数据库文件,附件即可【该源码由51aspx提供】

下载

视图与控制器对应关系:
例如:控制器里

view('welcome'); //对应视图根路径下welcome.blade.phpview('admin.pages.edit', $data); //对应对应视图根路径下admin/pages/edit.blade.php

视图文件代码上实际就是html。但自定义了一些标签。

在视图文件,我们可以使用PHP原生语法来获取传过来的数据:

<html>    <body>        <h1>Hello, <?php echo $name; ?></h1>    </body></html>

或者使用Laravel的Blade模板标签:双大括号:

<html>    <body>        <h1>Hello, {{$name}}</h1>    </body></html>

控制器(WelcomeController.php)里是这样的:

public function greeting() {    return view('greeting', ['name' => 'James']);}

注意,测试的时候要新建路由:

Route::get('greeting', 'WelcomeController@greeting');

访问:http://localhost/laravel5/public/index.php/greeting

传递数据到视图

// 使用传统的方法$view = view('greeting')->with('name', 'Victoria');// 使用魔术方法$view = view('greeting')->withName('Victoria');

模板标签语言

示例文件:
layout.blade.php 母视图

<html> <body>    <h1>Laravel Quickstart</h1>        @yield('content') </body> </html>

users.blade.php 普通视图

@extends('layout')@section('content')    Users!@endsection

1、输出:使用双花括号: {{$name}}。
2、继承:@extends,将copy一份母视图过来。
3、区域替换:@section...@endsection,该标签内的内容将替换在母视图使用@yield定义的内容。
4、条件语句:@if...@endif。

@if (count($errors) > 0)<div class="alert alert-danger">    Error!</div>@endif

5、数据遍历:@foreach...@endforeach

@foreach($users as $user)    <p>{{ $user->name }}</p>@endforeach

数据库操作

数据库相关配置文件都在 config/database.php。默认从.env文件中读取配置。

目前 Laravel 支持四种数据库系统: MySQL、Postgres、SQLite、以及 SQL Server。

读写分离:

'mysql' => [    'read' => [        'host' => '192.168.1.1',    ],    'write' => [        'host' => '196.168.1.2'    ],    'driver'    => 'mysql',    'database'  => 'database',    'username'  => 'root',    'password'  => '',    'charset'   => 'utf8',    'collation' => 'utf8_unicode_ci',    'prefix'    => '',],

使用DB类进行CURD

需要先引入。

use Illuminate\Support\Facades\DB;

例如:

public function greeting() {    $results = DB::select('select * from blog where id = ?', [1]);    print_r($results);exit;}

输出:

Array ( [0] => stdClass Object ( [id] => 1 [uid] => 1 [title] => test [content] => hello laravel5! [flag] => 1 [create_time] => 0 [update_time] => 0 ) )

更多方法(来自官方文档):

//执行 Select 查找$results = DB::select('select * from users where id = ?', [1]);$results = DB::select('select * from users where id = :id', ['id' => 1]);//执行 Insert 语法DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);//执行 Update 语法DB::update('update users set votes = 100 where name = ?', ['John']);执行 Delete 语法DB::delete('delete from users');//执行一般语法DB::statement('drop table users');//监听查找事件DB::listen(function($sql, $bindings, $time){    //});//数据库事务处理//你可以使用 transaction 方法,去执行一组数据库事务处理的操作:DB::transaction(function(){    DB::table('users')->update(['votes' => 1]);    DB::table('posts')->delete();});//手动事务DB::beginTransaction();DB::rollback();DB::commit();//获取连接//若要使用多个连接,可以通过 DB::connection 方法取用:$users = DB::connection('foo')->select(...);//你也可以取用原始底层的 PDO 实例:$pdo = DB::connection()->getPdo();//有时候你可能需要重新连接到特定的数据库:DB::reconnect('foo');//如果你因为超过了底层 PDO 实例的 max_connections 的限制,需要关闭特定的数据库连接,可以通过 disconnect 方法:DB::disconnect('foo');//查找日志记录//Laravel 可以在内存里访问这次请求中所有的查找语句。然而在有些例子下要注意,比如一次添加 大量的数据,可能会导致应用程序耗损过多内存。 如果要启用日志,可以使用 enableQueryLog 方法:DB::connection()->enableQueryLog();//要得到执行过的查找纪录数组,你可以使用 getQueryLog 方法:$queries = DB::getQueryLog();

学习资料

推荐教程:
Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】 - 岁寒
https://lvwenhan.com/laravel/432.html

Laravel 5 中文文档:

  1. http://laravel-china.org/docs/5.0
  2. http://www.golaravel.com/laravel/docs/5.0/

更多:

  • Laravist |Laravel Vuejs Bootstrap 视频教程
    https://laravist.com/

  • LaraBase——全栈工程师之家
    http://laravelbase.com/

  • Laravel - The PHP Framework For Web Artisans
    http://laravel.com/

  • laravel/laravel
    https://github.com/laravel/laravel

  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

    本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

    463

    2026.02.13

    微博网页版主页入口与登录指南_官方网页端快速访问方法
    微博网页版主页入口与登录指南_官方网页端快速访问方法

    本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

    135

    2026.02.13

    Flutter跨平台开发与状态管理实战
    Flutter跨平台开发与状态管理实战

    本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

    64

    2026.02.13

    TypeScript工程化开发与Vite构建优化实践
    TypeScript工程化开发与Vite构建优化实践

    本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

    20

    2026.02.13

    Redis高可用架构与分布式缓存实战
    Redis高可用架构与分布式缓存实战

    本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

    26

    2026.02.13

    c语言 数据类型
    c语言 数据类型

    本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

    29

    2026.02.12

    雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
    雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

    本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

    14

    2026.02.12

    豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
    豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

    本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

    524

    2026.02.12

    PostgreSQL性能优化与索引调优实战
    PostgreSQL性能优化与索引调优实战

    本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

    53

    2026.02.12

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    MySQL 初学入门(mosh老师)
    MySQL 初学入门(mosh老师)

    共3课时 | 0.3万人学习

    计算机系统从应用层到底层
    计算机系统从应用层到底层

    共6课时 | 0.4万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号