本文以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仓库源:
1 | # 修改 composer 的全局配置文件(推荐方式)# 打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:composer config -g repo.packagist composer https:
|
로그인 후 복사
接下来正式开始安装吧!
这里以Laravel 5.0 版本为例(PHP 版本 >= 5.4)。5.1 版本去掉了本系列教程主要讲解的元素(Auth 系统),不建议使用 5.1 来学习。
1 | # 指定5.0.22版本,项目目录是learnlaravel5composer create-project laravel/laravel learnlaravel5 5.0.22
|
로그인 후 복사
等待安装(需要5分钟左右):
1 | 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.
|
로그인 후 복사
安装完便可以访问了:
项目结构
1 | 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。
默认的配置:
1 | Route::get( '/' , 'WelcomeController@index' );
|
로그인 후 복사
控制器(Controllers)
控制器路径:app/Http/Controllers。
示例:WelcomeController.php
1 | <?php namespace App\Http\Controllers; class WelcomeController extends Controller { public function index() { return view( 'welcome' ); }}
|
로그인 후 복사
继承自根控制器:Controller.php
1 | <?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。
配置
配置文件:.env,包含了数据库和MAIL等配置。
config目录下也有相关配置。
模型(Model)
与Laravel4系列不同,旧的 app/models 目录已经完全被移除。相对的,Laravel5模型文件都放在 app 目录下,以及默认使用 App 命名空间。
示例:Blog.php
1 | <?php namespace App; use Illuminate\Database\Eloquent\Model; class Blog extends Model { public function listAll(){ return $this ->all(); }}
|
로그인 후 복사
视图(views)
视图根路径:resources/views。
视图与控制器对应关系:
例如:控制器里
视图文件代码上实际就是html。但自定义了一些标签。
在视图文件,我们可以使用PHP原生语法来获取传过来的数据:
1 | <html> <body> <h1>Hello, <?php echo $name ; ?></h1> </body></html>
|
로그인 후 복사
或者使用Laravel的Blade模板标签:双大括号:
1 | <html> <body> <h1>Hello, {{ $name }}</h1> </body></html>
|
로그인 후 복사
控制器(WelcomeController.php)里是这样的:
1 | public function greeting() { return view( 'greeting' , [ 'name' => 'James' ]);}
|
로그인 후 복사
注意,测试的时候要新建路由:
1 | Route::get( 'greeting' , 'WelcomeController@greeting' );
|
로그인 후 복사
访问:http://localhost/laravel5/public/index.php/greeting
传递数据到视图
模板标签语言
示例文件:
layout.blade.php 母视图
1 | <html> <body> <h1>Laravel Quickstart</h1> @yield( 'content' ) </body> </html>
|
로그인 후 복사
users.blade.php 普通视图
1 | @ extends ( 'layout' )@section( 'content' ) Users!@endsection
|
로그인 후 복사
1、输出:使用双花括号: {{$name}}。
2、继承:@extends,将copy一份母视图过来。
3、区域替换:@section...@endsection,该标签内的内容将替换在母视图使用@yield定义的内容。
4、条件语句:@if...@endif。
1 | @ if ( count ( $errors ) > 0)<div class = "alert alert-danger" > Error!</div>@ endif
|
로그인 후 복사
5、数据遍历:@foreach...@endforeach
1 | @ foreach ( $users as $user ) <p>{{ $user ->name }}</p>@ endforeach
|
로그인 후 복사
数据库操作
数据库相关配置文件都在 config/database.php。默认从.env文件中读取配置。
目前 Laravel 支持四种数据库系统: MySQL、Postgres、SQLite、以及 SQL Server。
读写分离:
1 | '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
需要先引入。
1 | use Illuminate\Support\Facades\DB;
|
로그인 후 복사
例如:
1 | public function greeting() { $results = DB::select( 'select * from blog where id = ?' , [1]); print_r( $results ); exit ;}
|
로그인 후 복사
输出:
1 | Array ( [0] => stdClass Object ( [id] => 1 [uid] => 1 [title] => test [content] => hello laravel5! [flag] => 1 [create_time] => 0 [update_time] => 0 ) )
|
로그인 후 복사
更多方法(来自官方文档):
学习资料
推荐教程:
Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】 - 岁寒
https://lvwenhan.com/laravel/432.html
Laravel 5 中文文档:
- http://laravel-china.org/docs/5.0
- 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