如何在不实例化整个 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-&gt;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 模型?的主要内容,如果未能解决你的问题,请参考以下文章

WCF反序列化如何在不调用构造函数的情况下实例化对象?

如何在不刷新整个页面的情况下重新加载组件?

如何在不重新加载整个页面的情况下刷新 div?

如何在不重新加载整个页面的情况下重新加载 div?

在不实例化新控制器的情况下弹出查看控制器

如何在不使用 Nib 的情况下实例化和调用 UIView 子类