深入理解Laravel框架--手动创建laravel框架(2)

来源:互联网 发布:阿里的大数据应用 编辑:程序博客网 时间:2024/05/21 10:28

在上一章我们利用composer,添加了我们的路由组件并且成功返回了结果。
现在我们来尝试如何构建我们Controller。


添加控制器模块

我们同样也按照laravel的的文件结构添加控制器,首先在你的Http文件下面新建一个Controllers文件夹,用于存放我们所有的控制器,新建一个HomeController.php文件,

HomeController.php

<?phpnamespace App\Http\Controllers;class HomeController {    public function index () {        return "Welecom ! This is your home page!";    }}

同时我们要注册我们这一条路由在我们Http\routes.php文件中。

routes.php文件

<?php    $app['router']->get('/',function(){        return 'Hello World';    });    $app['router']->get('home','App\Http\Controllers\HomeController@index');?>

最后访问我们的地址http://127.0.0.1/index.php/home,就能够看到返回响应的结果。

值得注意的,如果想要直接访问/home,省略掉index.php,那么需要在apache中进行相应的配置。这个直接在项目的入口文件位置创建静态文件.htaccess

RewriteEngine On
RewriteRule ^ index.php [L]


Model组件

添加完MVC中的控制器之后,我们接着就来添加MVC框架中的M,model组件。模型组件主要实现数据处理的功能,这部分功能有Laravel框架中illuminate/database组件来完成。

首先在composer.json中添加illuminate/database组件信息,然后执行composer update,或者直接执行composer require illuminate/database 5.*后面的数字时你的版本信息,具体可以到官网packgist上面查询。

下载完成之后,我们需要实例化一个数据库梳理的类。在实例化之前我们还有一些准备工作需要做
1. 创建mysql数据库testusers表,users表中,有idnameage等相关信息,并插入相关的测试数据
2. 根据laravel的相关文件结构,在项目文件夹下创建一个config文件夹,然后在config文件夹中创建一个database.php文件。

database.php文件夹中的相关设置

<?phpreturn array(    'driver'        => 'mysql',//选择数据库类型    'host'          => '127.0.0.1',//数据库的地址    'database'      => 'test',//选择数据库    'username'      => 'root',//用户名    'password'      => '',//密码    'charset'       => 'utf8',    'collation'     => 'utf8_general_ci',    'prefix'        => ''//前缀);?>

在我们的入口文件index.php中,添加如下代码

<?php//首先引入composer自动加载文件require __DIR__.'../vendor/autoload.php';//接着实例化我们的服务容器$app = new Illuminate/Container/Container();//将事件和路由注册到我们的服务容器中with(new \Illuminate\Events\EventServiceProvider($app))->register();with(new \Illuminate\Routing\RoutingServiceProvider($app))->register();//再接下来我们就实例化我们的数据库操作模型$manager =  new \Illuminate\Database\Capsule\Manager();$manager->addConnection(requier '../config/database.php') ;$manager->bootEloquent();//加载路由require __DIR__.'/../app/Http/routes.php';//实例化请求并分发处理请求$request = \Illuminate\Http\Request::createFormGlobals();$response = $app['router']->dispatch($request);$response->send();?>

上面一端实例化数据库Illuminate\Database\Capsule\Manager的过程,通过addConnection()函数完成数据库的相关配置并通过bootEloquent函数完成了数据库Eloquent ORM模块的启动。简单来说,通过配置连接数据库,并且启动ORM模块。(ORM 指 object relationship mapping,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换)

ORM方式操作数据库需要两个步骤来实现,一个创建模型,二通过模型类的方法操作数据库。

接着在我们的app文件夹中创建一个名为User.php的model,需要注意的是User这个模型对应的数据库就是小写user后面加上复数,也就是users这张表。当然也可以通过protect $table变量指定对应的表。

User.php

<?php namespace App;use Illuminate\Database\Eloquent\Model;class User extends Model {    public $timestamps = false;}

然后我们就可以使用我们ORM来操作数据了,我们在HomeController.php文件中的index方法中来操作。

HomeController.php文件

<?phpnamespace App\Http\Controllers;use App\User;class HomeController {    public function index()    {        $user = User::first();        return $user;    }}

这时候访问我们的http://127.0.0.1/home,就能看到返回的用户数据了。


添加视图组件

接着我们添加MVC框架中V,Laravel中实现V层,使用了illuminate/view组件,所以我们使用
composer require illuminate/view下载到我们的项目中,然后修改我们项目的入口文件index.php

<?php//use Illuminate\Database\Capsule\Manager;//引入自动加载文件require __DIR__.'/..'.'/vendor/autoload.php';//实例化服务器容器,注册事件、路由器服务提供商$app = new Illuminate\Container\Container();\Illuminate\Container\Container::setInstance($app);with(new \Illuminate\Events\EventServiceProvider($app))->register();with(new \Illuminate\Routing\RoutingServiceProvider($app))->register();//启动Eloquent ORM 模块并进行相关配置$manager = new \Illuminate\Database\Capsule\Manager();$manager->addConnection(require '../config/database.php');$manager->bootEloquent();$app->instance('config',new \Illuminate\Support\Fluent());$app['config']['view.compiled'] = __DIR__."/../storage/framework/views/";$app['config']['view.paths'] = ["E:\\www\\lara\\resources\\views"];with(new \Illuminate\View\ViewServiceProvider($app))->register();with(new \Illuminate\Filesystem\FilesystemServiceProvider($app))->register();//加载路由require __DIR__.'/../app/Http/routes.php';//实例化请求并分发处理请求$request = \Illuminate\Http\Request::createFromGlobals();$response = $app['router']->dispatch($request);$response->send();

同时修改Controller中的代码,使用视图,在laravel项目文件夹创建resource/views/文件夹,并创建 home.blade.php

<?phpnamespace App\Http\Controllers;use App\Models\Student;use App\User;use Illuminate\Container\Container;class HomeController {    public function index()    {        $user = User::first();        $app = Container::getInstance();        $factory = $app->make('view');        return $factory->make('home')->with('user',$user);    }}

这段代码要说的内容比较多,暂时先放到后面在说。

手动创建Laravel框架暂且告一段落。

原创粉丝点击