说在前面的话:
laravel算是近几年最火的php web开发框架了,在github的php项目中稳居第一(Most Popular PHP Project at Github)。star数量甚至是我先前挚爱codeigniter的两倍。这几天抽空看了下laravel的文档与入门视频(laracasts.com),惊讶于现在的php居然已经能写成这样了,laravel简直就是php届的spring。容器、依赖注入、中间件。。。跟朴实无华的codeigniter相比简直就是在炫技,当然这也成了laravel反对派们的口实——“将追求简单直接的php写成了晦涩臃肿的java”。我试了一下laravel与codeigniter渲染一个index页面的性能,laravel平均耗时80ms,而ci只需要8ms,=。=# but!who care!“当你需要考虑性能的时候,性能早已不是问题了。”
balabala吹完laravel,该说正题了。除了laravel本身的框架之外,laravel还提供了一个屌炸天命令行工具artisan,简直就是开发神器。这篇文章就是想记录下平时常用的命令,免得一段时间不写全忘光光。
一、启动服务
$ php artisan serve
使用这个命令,直接在8000端口启动web服务,而不需要在配置nginx,这对于开发环境特别方便。
二、路由相关
1. 打印所有路由
$ php artisan route:list
2. 缓存路由
$ php artisan route:cache $ php artisan route:clear
route:cache命令会生成路由缓存文件bootstrap/cache/routes.php,然后项目启动时候使用路由缓存取代app/Http/routes.php,据官方说这能提高路由效率(不过我试了下好像并没有感觉=。=#)。
注意:路由缓存不支持闭包路由,即在app/Http/routes.php
文件中的所有路由必须是基于控制器的路由(Controller@Method的方式)。另外,如果修改了app/Http/routes.php
文件,那么就必须重新生成路由缓存,所以只推荐在生产环境上使用路由缓存。
三、migrate
我也不知道为啥要取migrate这个名字,迁移。laravel的migrate功能说白了就是定义数据库表结构与初始数据,并通过migrate命令自动导入数据库。
1. 创建migration文件
$ php artisan make:migration create_user_table
makr:migration命令会在database/migrations目录下创建migration文件(时间戳_迁移名.php),我们可以在该文件中定于数据库表结构。
注意:通常在定义了create类型的migration文件后,如果我们想修改表结构,但又不想再回去修改原来的migration文件,那么我们可以添加一个alter类型的migration文件,在up方法中使用Schema::table()而不是Schema::create()。
class CreateUserTable extends Migration { public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('password'); }); } public function down() { Schema::drop('user'); } }
class AlterUserTable extends Migration { public function up() { Schema::table('user', function (Blueprint $table) { $table->integer('age')->unsigned(); }); } public function down() { Schema::table('user', function (Blueprint $table) { $table->dropColumn('age'); }); } }
2. 执行migrate迁移
$ php artisan migrate
执行完后,会发现数据库中已经自动生成了对应的几张表。
注意:迁移执行顺序是依据migration文件的文件名时间戳前缀来依次执行的,所以如果某个表存在外键依赖关系,要保证被依赖的表先被migrate。
注意:有些时候迁移可能会出现异常,比如说“Class not found”或者“No such file or directory”,可以尝试先执行composer dump-autoload
命令后再进行迁移。
四、tinker
tinker是一个交互工具,进入tinker模式就好比进入了一个php的shell,我们可以在这个“shell”上直接敲php代码并执行获得反馈。
1. 进入tinker
$ php artisan tinker
2. 数据库操作
DB::listen(function($query) { var_dump($query->sql); });
DB::table('table_name')->get(); DB::table('table_name')->insert(...);
3. 数据模型操作
laravel初始项目默认有一个App\User数据模型,对应数据库的users表。我们可以在tinker直接使用Model类的方法来执行数据模型操作。
注意,使用DB查询数据库返回的数据是stdClass,使用Model查询数据库返回的是Model对象。
五、任务队列
php artisan queu:listen 持续监听
php artisan queue:work 执行头一个job
php artisan queue:work –daemon 并不是后台运行=。=# 而是表示持续执行work,官方文档推荐用这个取代listen,因为daemon worker不会每次重启框架,所以速度快,但你要个更注意程序中的内存问题,不处理好容易导致worker占用越来越大越来越大的内存。。。另外因为不会重启框架,所以期间如果修改了代码,必须restart worker
六、vendor:publish
执行第三方包的publish指令。publish指令的主要作用是拷贝第三方包的assets文件(可能是config文件、view文件等)到项目目录中。publish指令通常定义在xxxServiceProvider.php的boot()方法中。
以zizaco/entrust包为例,在EntrustServiceProvider.php中定义的publish指令,其意义是拷贝entrust包内的config/config.php文件到项目配置目录(app/config/)下,并命名为entrust.php。
// 执行所有第三方包的publish指令 php artisan vendor:publish // 执行某个ServiceProvider的publish指令 php artisan vendor:publish --provider="Zizaco\Entrust\EntrustServiceProvider"
另外:
laravel的25个小技巧:25 Laravel Tips and Tricks