如何在不实例化整个 Laravel 的情况下加载 Laravel 模型?
Posted
技术标签:
【中文标题】如何在不实例化整个 Laravel 的情况下加载 Laravel 模型?【英文标题】:How can I load Laravel Model without instantiating the whole Laravel? 【发布时间】:2018-10-05 15:09:18 【问题描述】:仅用于实验目的。我有一个自制的 index.php,我有一个名为 Something.php 的 Laravel 模型(使用 php artisan make:model Something
制作)。
我如何将 Something.php 加载到 index.php 并拥有所有功能,例如使用 Laravel 加载模型?
目前我有这些代码:
<?php
# This is just for testing if Laravel model can be loaded independently
require_once('../vendor/autoload.php');
require_once('../bootstrap/app.php');
require_once('OtherPackage.php');
require_once('Testimonial.php');
use Test\Sample;
use App\Testimonial;
echo 'Hello World<br />';
$s = new Sample();
$t = Testimonial::all();
echo print_r($s, true);
echo '<br />';
echo print_r($t, true);
使用php -S localhost:8080
会出现这个错误:
[Wed Apr 25 15:02:50 2018] ::1:58542 [500]: / - Uncaught Error: Call to a member function connection() on null in /home/notalentgeek/notalentgeek/Temporary Working Folder Here/testing-testimonial-2-without-auths/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1135
Stack trace:
#0 /home/notalentgeek/notalentgeek/Temporary Working Folder Here/testing-testimonial-2-without-auths/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1101): Illuminate\Database\Eloquent\Model::resolveConnection(NULL)
#1 /home/notalentgeek/notalentgeek/Temporary Working Folder Here/testing-testimonial-2-without-auths/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(931): Illuminate\Database\Eloquent\Model->getConnection()
#2 /home/notalentgeek/notalentgeek/Temporary Working Folder Here/testing-testimonial-2-without-auths/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(877): Illuminate\Database\Eloquent\Model->newBaseQueryBuilder()
#3 /home/notalentgeek/notalentgeek/Temporary Working Folder Here/testing-testi in /home/notalentgeek/notalentgeek/Temporary Working Folder Here/testing-testimonial-2-without-auths/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 1135
我尝试使用$app->withEloquent()
,正如PHP Lumen Call to a member function connection() on null 中所说的那样。但是,它返回新的错误:
[Wed Apr 25 15:10:08 2018] ::1:58700 [500]: / - Uncaught Error: Call to undefined method Illuminate\Foundation\Application::withEloquent() in /home/notalentgeek/notalentgeek/Temporary Working Folder Here/testing-testimonial-2-without-auths/app/index.php:10
我的目标是我想用 Laravel 重构旧代码。所以,我想知道用我的旧代码覆盖 Laravel 项目的 ON TOP 来“启动” Laravel 的最佳方式是什么。
【问题讨论】:
【参考方案1】:Laravel 是一个 php 框架。
它的设计考虑了特定的工作方式。这种工作方式在整个网络上都有广泛的记录。尽管有时可能需要重写类并破解框架,但通常使用 Laravel 构建东西的第一种方法是按照它的用途来使用它。
这意味着您不应该在 index.php 文件中乱搞。 这是一个加载框架其余部分的文件。
开始使用路由、模型、控制器和视图。 如果您想将旧代码集成到新的 Laravel 应用程序中,请尝试弄清楚您的代码如何适应 MVC 结构,以及您应该在服务中组织的任何其他代码,然后您可以将其注入到您的控制器中。
有关更多信息,请查看以下链接。
https://nl.wikipedia.org/wiki/Model-view-controller-model
https://laravel.com/docs/5.6/routing
【讨论】:
以上是关于如何在不实例化整个 Laravel 的情况下加载 Laravel 模型?的主要内容,如果未能解决你的问题,请参考以下文章