2015-11-23 174 views
0

我想把这个问题给我。为了更好地理解PHPLaravel这段代码是什么意思...?

public function up() 
{ 
    Schema::create('tasks', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->timestamps(); 
    }); 
} 

这实际上是一个带有静态函数的方法吗?而在这个静态函数里面另外一个......?我不得不说我是一个初学者,框架

这是我第一次玩一个。

+0

'up()'触发一个“新的模式” - 我认为模式是Laraval中的组件或模型(从未使用过)。该调用中的函数是[回调函数](http://php.net/manual/en/language.types.callable.php) - 用于告诉'Schema :: create'它应该如何处理其处理。 –

+0

另请注意,'create'是'Schema'类的[静态方法](http://php.net/manual/en/language.oop5.static.php)。 –

回答

4

如果您的困惑更多地是关于代码如何工作而不是它的作用,那实际上是一个非常复杂的主题。首先,这不是一个真正的静态方法。

Laravel使用一些叫做Facades的东西,它允许你“静态地”调用方法,这可能会让新来的人感到困惑。简而言之,外墙是非常方便的,因为当您使用Laravel的外观调用方法时,它为您“遮罩”大量实例对象,然后调用该方法。

在这个例子中我们以Schema为例。这个Schema班在哪里?如果你看看你的config/app.php文件中,你会看到这行代码下别名:因此

'Schema' => Illuminate\Support\Facades\Schema::class, 

SchemaIlluminate\Support\Facades\Schema的别名。

所以,如果你看看Illuminate\Support\Facades\Schema,你会发现它extends Facade。这是Laravel的门面之一。这个目录有很多Laravel的外墙。无论如何,在这个类的顶部,你还会看到一个小便利的评论,说:

@see \Illuminate\Database\Schema\Builder 

打开该文件,这是你的Schema类。在幕后,Laravel为你实例化这个对象。为什么这么重要?看看构造函数。这个班的其中一个依赖是Illuminate\Database\Connection。打开这个类,它有更多的依赖关系。门面不是一直手动实例化所有这些类,而是为你做这项工作。因此,当您执行Schema::create(...时,Laravel正在实例化所有这些依赖关系,并调用Illuminate\Database\Schema\Builder类中的create方法。很棒,对吗?如果您在该文件看,你会看到方法:

/** 
* Create a new table on the schema. 
* 
* @param string $table 
* @param \Closure $callback 
* @return \Illuminate\Database\Schema\Blueprint 
*/ 
public function create($table, Closure $callback) 
{ 
    $blueprint = $this->createBlueprint($table); 

    $blueprint->create(); 

    $callback($blueprint); 

    $this->build($blueprint); 
} 

你可以看到它的不是静态方法。 Laravel正在幕后创建一个新实例,然后调用该方法。

第一个参数接受一个字符串,它将是您正在创建的表的名称。然后它接受封闭。在这种情况下,正如@ Kostas Mitsarakis所说,您正在创建一个名为tasks的表格。该表具有一个名为id等的自动递增列。

+0

非常感谢您的解释。我想知道如何工作。因为我对工作人员的工作方式总是有点好奇。你100%覆盖我的问题。 –

1

它创建一个表tasksid作为auto increment柱,namevarchar柱和created_atupdated_at作为timestamp列。

更多信息here