Laravel Snippets for VIM
边学,边实践,边整理的 snippets
sunzhongwei/vim-laravel-snippets
Tips: 在 VIM 打开 blade 模板文件时,自动将 filetype 设置为 html 的方法: 在 .vimrc 中加入下面这行配置
autocmd BufRead,BufNewFile *.blade.php set filetype=html
安装 Laravel
参考 Installation
说明:
安装 Laravel 首先要安装包管理器 composer, 然后通过 composer 安装 Laravel. 类似通过 python 的包管理器 pip 安装 Django 一样。
安装 composer 的方法,Download Composer. 安装 composer.phar 之后,需要将其置于 $PATH 路径下。
最简单的做法是
sudo apt install composer
由于 composer 官方源被墙,所以需要修改源为国内的镜像。 目前使用 laravel 阿里云的国内镜像
初始化 Laravel 项目
例如,要初始化一个 blog 项目,有两种方式
一、通过 laravel
laravel new blog
二、通过 composer
composer create-project --prefer-dist laravel/laravel blog "5.2.*"
目前 laravel 最新版本已经是 5.3, 如果需要安装旧版本的 5.2, 就需要指定版本号。否则会默认安装最新的 release 版本 5.3.
官网说,通过 laravel 的方式,相对 composer 要快一些,因为 laravel 是通过将本地依赖复制到项目目录的方式实现的。
需要等待一千年才能初始化完项目。
实际上,通过 composer 连接国内镜像的方式要快得多。
哪些代码需要添加到代码仓库进行管理
这也是 Laravel 比 Django 细心的地方,初始化的时候已经自动生成了 gitignore 配置。
$ ls -la
total 304
drwxr-xr-x 23 zhongwei staff 782 May 15 17:51 .
drwxr-xr-x 94 zhongwei staff 3196 May 15 17:31 ..
-rw-r--r-- 1 zhongwei staff 458 May 15 17:41 .env
-rw-r--r-- 1 zhongwei staff 423 May 15 17:31 .env.example
-rw-r--r-- 1 zhongwei staff 61 May 15 17:31 .gitattributes
-rw-r--r-- 1 zhongwei staff 73 May 15 17:31 .gitignore
...
$ cat .gitignore
/vendor
/node_modules
/public/storage
Homestead.yaml
Homestead.json
.env
node_modules 是 node 的依赖包安装目录。
vendor 目录是做什么的呢? (中文:供应商、卖主、自动售货机)
$ ls vendor/
autoload.php composer fzaninotto jeremeamia mockery nesbot phpdocumentor psr swiftmailer
bin dnoegel hamcrest laravel monolog nikic phpspec psy symfony
classpreloader doctrine jakub-onderka league mtdowling paragonie phpunit sebastian vlucas
可见是 Laravel 的依赖包安装目录。
vendor是第三方库和插件放置的文件夹,一般来源于composer的安装
生产环境部署
git clone 出代码之后,到项目目录下,执行
composer install
php artisan migrate
复制一份 .env 文件,配置数据参数
参考 How to Install Laravel with an Nginx Web Server on Ubuntu 14.04
如果权限需要设置,执行
sudo chown www-data:adm -R storage/
sudo chown www-data:adm -R bootstrap/
"chmod -R o+w" the storage and bootstrap/cache directories
启动服务
php artisan serve
数据库操作
建立一个 model, 例如,新建一个招聘类网站的 job model
php artisan make:model Job
然后 app 目录下,就会看到自动生成了一个 Job.php 的文件。
如何配置数据库参数呢?例如,我想选择 MySQL 而不是 SQLite 时呢? 参考 Database: Getting Started 可知
配置置于 config/database.php 下, 从代码里可以看出,数据库参数是从环境变量里读取的。而不是在代码中配置的,具体配置在文件 .env 中,而这个文件是默认排除在 git 仓库之外的。 确实被震撼到了,这点 Laravel 比 Django 先进,至少在规范性上,以及对新手的教育上,这点都是其他框架不能比拟的。
在 .env 文件中配置了数据库信息之后,进行初始化数据库操作
php artisan migrate
如何定义一个 model 呢? 参考 Eloquent: Getting Started
默认每个表会加上 created_at, updated_at 这两个字段,如果不想添加,设置
public $timestamps = false;
但是,Laravel 的 Eloquent ORM 与 Django ORM 最大的区别是,Laravel 不是通过 model 属性来定义表结构的,而是手动写 migration 文件 (抓狂), 例如,要创建 jobs 表
php artisan make:migration create_jobs_table --create=jobs
然后在 database/migrations 目录下找到对应的文件, 添加字段。问题来了,如何修改表结构呢?
从 Django 转到 Laravel 的开发人员都有同意的疑问,感觉 Laravel 不能自动生成 migration 文件太落后了
但是,换个角度想,如果表已经存在,Eloquent ORM 这套东西就可以绕过 migration 直接操作数据库,还是很实用的。 只能说,有利有弊。
但从实战上讲,留下 migration 文件还是非常有必要的,原因是我经常需要在几台开发机上进行开发。 如果 migration 不同步,就会出现每个开发机的数据表结构不一致的问题。要手动去改太麻烦了。 当然,把 sql alter 脚本留下也可以,但是不容易形成规范。
如果想新增一个字段,具体的操作方法 Add new column migrate to database
Routing
route 由指定 controller 处理的方法
模板
位于 resources/views 下
$ tree resources/
resources/
├── assets
│ └── sass
│ └── app.scss
├── lang
│ └── en
│ ├── auth.php
│ ├── pagination.php
│ ├── passwords.php
│ └── validation.php
└── views
├── errors
│ └── 503.blade.php
├── vendor
└── welcome.blade.php
类似 Django Admin 的 admin 管理后台
- Laravel Panel 配置简单、界面漂亮
- Laravel Administrator 安装失败...
总体来说,Laravel Panel 的配置还是比 Django Admin 稍显复杂。但是已经超出了我的预期, 嘿嘿。
Restful 登录
首先得明白 Laravel 的 authentication (身份验证) 机制, 核心概念包括两个
- guard 警卫
- session guard 使用 session/cookie 来维护登录状态
- token guard 使用 API token 来验证用户是否登录
- provider 提供者. 定义了用户信息从哪里获取,例如 Eloquent 或 database query builder
Laravel 默认生成了一个 app/User 的 Eloquent Model。 同时,还自动生成了两个 controller
- Auth/AuthController 用于登录和注册
- Auth/PasswordController 用于重置密码
更变态的是 Laravel 还有一键生成 login/register 页面的功能
php artisan make:auth
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/auth/login.blade.php
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/auth/register.blade.php
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/auth/passwords/email.blade.php
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/auth/passwords/reset.blade.php
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/auth/emails/password.blade.php
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/layouts/app.blade.php
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/home.blade.php
Created View: /home/zhongwei/work/hhhhhhhhhhhh/resources/views/welcome.blade.php
Installed HomeController.
Updated Routes File.
Authentication scaffolding generated successfully!
如果是个人站,完全可以接受这套 bootstrap 风格的 login/register 界面。省时省力。
实际上,我们要通过 ajax 的方式实现 login 也很简单, 参考 Laravel Login with AJAX
public function postLogin(Request $request)
{
$auth = false;
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials, $request->has('remember'))) {
$auth = true; // Success
}
if ($request->ajax()) {
return response()->json([
'auth' => $auth,
'intended' => URL::previous()
]);
} else {
return redirect()->intended(URL::route('dashboard'));
}
return redirect(URL::route('login_page'));
}
英文
- blade 叶片
- artisan 工匠
- Eloquent 雄辩的,有口才的; 有说明力的; 富于表情的,逼真的; 动人的
Composer 国内镜像
http://pkg.phpcomposer.com/
composer 是 PHP 的一个包管理工具,类似于 python 的 pip, nodejs 的
Laravel 开源项目列表
参考资料
安装出错 RuntimeException: The Zip PHP extension is not installed. Please install it and try again.
Ubuntu 16.04 + PHP 7.0.4
sudo apt-get install php7.0-zip
laravel/framework v5.2.18 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
Ubuntu 16.04 + PHP 7.0.4
To enable extensions, verify that they are enabled in those .ini files: - /etc/php/7.0/cli/php.ini
sudo apt-get install php7.0-mbstring
不需要更改 php.ini 文件。
phpunit/phpunit 4.0.2 requires ext-dom * -> the requested PHP extension dom is missing from your system.
Ubuntu 16.04 + PHP 7.0.4
sudo apt-get install php-xml
PDOException: could not find driver
Ubuntu 16.04 + PHP 7.0.4
sudo apt-get -y install php-mysql
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式
谈笑风生
noodles 8年前