路径在wamp中工作,但在生产服务器上不适用于slim框架

时间:2014-01-01 10:38:53

标签: php wamp slim

这是我简单的苗条索引文件:

<?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

1 个答案:

答案 0 :(得分:2)

我建议两件事:

定义APP_PATH常量以帮助缓解相对路径挫折

我已经用PHP开发了十多年了,这种事情仍然让我兴奋不已。我处理它的方法之一是定义一个APP_PATH目录并设置相关的其他内容。在index.php的顶部,您可以添加:

define('APP_PATH', realpath(dirname(__DIR__)));

现在您100%肯定知道您的Linux服务器上的APP_PATH/home/u379225821。如果您希望APP_PATHpublic_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');即可。