Laravel框架 - 命令行工具artisan

Laravel框架 - 命令行工具artisan

说在前面的话:

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,这对于开发环境特别方便。

屏幕快照 2016-06-15 上午1.17.43

 

二、路由相关

1. 打印所有路由

$ php artisan route:list

屏幕快照 2016-06-15 上午1.43.40

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

屏幕快照 2016-06-21 下午6.50.01

执行完后,会发现数据库中已经自动生成了对应的几张表。

注意:迁移执行顺序是依据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

屏幕快照 2016-06-15 上午1.30.55

2. 数据库操作

DB::listen(function($query) { var_dump($query->sql); });
DB::table('table_name')->get();
DB::table('table_name')->insert(...);

屏幕快照 2016-06-15 上午1.59.20

3. 数据模型操作

laravel初始项目默认有一个App\User数据模型,对应数据库的users表。我们可以在tinker直接使用Model类的方法来执行数据模型操作。

屏幕快照 2016-06-15 上午10.27.43

注意,使用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。

屏幕快照 2016-06-28 上午1.10.05

// 执行所有第三方包的publish指令
php artisan vendor:publish

// 执行某个ServiceProvider的publish指令
php artisan vendor:publish --provider="Zizaco\Entrust\EntrustServiceProvider"

屏幕快照 2016-06-28 上午1.17.43

 

另外:

laravel的25个小技巧:25 Laravel Tips and Tricks

Leave a Reply

Your email address will not be published. Required fields are marked *

TOC