这是我简单的苗条索引文件:
<?php
require 'vendor/autoload.php';
session_start();
// Include all controllers
foreach(glob("controllers/*.php") as $controller)
{
include_once $controller;
}
// Include all models
foreach(glob("models/*.php") as $model)
{
include_once $model;
}
include_once 'libs/ApiService.php';
include_once 'libs/AuthService.php';
include_once 'libs/HelperService.php';
// Instantiate a new Slip application
$app = new \Slim\Slim(array(
'debug' => true,
'corpKey' => '2930850',
'corpVcode' => '..',
'ceoCID' => '92311241'
));
// GET CONTROLLERS
$home = new Home($app);
$app->get('/', function () use ($home, $app) {
$home->index();
});
$app->run();
现在我的家庭控制器看起来像这样:
<?php
use Respect\Validation\Validator;
class Home
{
// Slim application instance
private $app;
public function __construct($app)
{
$this->app = $app;
}
/**
* Render home page
*/
public function index()
{
// Fetch all articles
$articles = Article::orderBy('created_at', 'DESC')->limit(5)->get();
$this->app->render("../view/home/index.php", array('articles' => $articles));
}
}
行$this->app->render()
给出一个错误,即文件index.php即使存在也不存在。我也尝试用绝对路径替换它,只用view/home/index.php
但总是同样的问题。
该应用程序适用于wamp但不适用于生产服务器。
1我注意到的是我可以在wamp上使用这种style_once但不在服务器上使用:
include_once '/libs/ApiService.php'; // Works on WAMP but not on Server
答案 0 :(得分:2)
我建议两件事:
定义APP_PATH
常量以帮助缓解相对路径挫折
我已经用PHP开发了十多年了,这种事情仍然让我兴奋不已。我处理它的方法之一是定义一个APP_PATH
目录并设置相关的其他内容。在index.php
的顶部,您可以添加:
define('APP_PATH', realpath(dirname(__DIR__)));
现在您100%肯定知道您的Linux服务器上的APP_PATH
是/home/u379225821
。如果您希望APP_PATH
为public_html
,请将其更改为:
define('APP_PATH', realpath(__DIR__));
它的重要性并不重要,重要的是你确切知道自己的位置。我高度建议尝试使用它,通过在定义后直接添加die(var_dump(APP_PATH));
进行调试,以确保您的位置在您认为的位置。由于您在Windows上进行开发并在Linux上进行部署,因此在两台服务器上进行四重检查该定义的结果。
在实例化Slim应用程序时设置模板目录
默认情况下,Slim View会在./templates
中查找相对于index.php
的模板(在Application Settings documentation中查找 templates.path 设置)。根据您的目录结构(来自错误),这将是/home/u379225821/public_html/templates
。您告诉Slim要在index.php
中查找您的/home/u379225821/public_html/./templates/../view/home
模板。困惑了吗?我也是。
通过添加'templates.path'键并设置../view
目录的路径来解决这个问题,无论它在哪里。使用新的APP_PATH
常量可以更轻松地设置。然后,当您在render
控制器中拨打Home
时,只需拨打$this->app->render('home/index.php');
即可。