企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
使用laravel框架的`"illuminate/view"` ,该组件可以将视图以模板的方式创建,在其他视图中可以调用,继承已经创建的模板,并通过模板语法使得视图设计更加简单,规范,高效 修改composer.json文件 ~~~ { "require": { "illuminate/routing": "*", "illuminate/events": "*", "illuminate/database": "*", "illuminate/view": "*" }, "autoload": { "psr-4": { "App\\": "app/" } } } ~~~ 接着`composer update`命令完成视图组件的添加.视图组件的使用需要完成下面四个工作: 一是添加视图模板和编译文件的存储路径 二是对视图进行相关配置和服务注册 三是使用视图文件 四是创建视图模板文件 `"illuminate/view"` 组件将视图模板文件编译成普通的视图文件存储起来,所以首先需要添加相应的存储路径.这里依然按照laravel框架目录结构添加2个文件路径,其中视图模板文件的存储路径为项目下的`"resources\views\"` ,编译文件的存储路径为 项目目录下的` "storage\framework\views\"` .接下来完成视图组件的相关配置和服务注册,这部分内容是在入口文件实现的 public/index.php ~~~ <?php use Illuminate\Database\Capsule\Manager; use Illuminate\Support\Fluent; //调用自动加载文件,添加自动加载文件函数 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(); //启动ORM模块并进行相关配置 $manager = new Manager(); $manager->addConnection(require '../config/database.php'); $manager->bootEloquent(); //视图 $app->instance('config', new Fluent); $app['config']['view.compiled'] = __DIR__.'/../storage/framework/views'; $app['config']['view.paths'] = [__DIR__.'/../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(); ~~~ **通过服务容器中的setInstance()静态方法将服务容器实例添加为静态属性.这样就可以在任何位置获取服务容器的实例** 视图模块的配置稍微复杂一些,首先通过服务容器实例的instance()方法将服务名称为`config`和`Illuminate\Support\Fluent`类的实例进行绑定,该类的实例主要用于存储视图模块的配置信息.这里用到的配置信息分别是前文中创建的视图模板文件和编译文件存储路径,分别添加到配置实例中.接下来进行服务注册,因为视图模块的使用需要文件模块的支持,在下载视图组件时,文件组件会作为依赖下载,所以可以直接使用文件组件的服务提供者进行服务注册.然后就可以使用视图组件了,这里在处理函数中使用视图组件实现视图的加载,其中路由文件与在控制器模块中添加的相同,处理函数依然是index()函数 ~~~ <?php namespace App\Http\Controllers; use App\Models\Student; use Illuminate\Container\Container; class WeclomeController { public function index() { $student = Student::first(); $data = $student->getAttributes(); $app = Container::getInstance(); $factory = $app->make('view'); return $factory->make('welcome')->with('data',$data); } } ~~~ 首先通过服务容器的getInstance()静态方法获取服务容器的实例,然后通过服务容器获取服务名称为view的实例对象,即为视图创建工厂类(Illuminate\View\Factory)实例,接着通过视图创建工厂的make()方法来创建视图实例对象,其中参数为视图文件的名称,实际上是在视图模板文件路径中查找对应的文件名的文件,视图文件将在后面进行创建,最后通过视图实例的with()方法添加数据,使其可以在视图文件中使用 接下来进行视图模板的创建,首先在视图模板文件目录中创建"welcome.blade.php"文件,该视图组件规定模板文件要以".blade.php"为后缀,文件名要与视图创建工厂的make()方法中的字符串参数相同 视图文件 resources/views/welcome.blade.php ~~~ <h3>视图中显示学生信息</h3> 学生id: {{$data['id']}}; <br /> 学生name: {{$data['name']}}; <br /> 学生age: {{$data['age']}}; <br /> ~~~ 浏览器访问下