Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对非对象(Symfony和Silex)调用成员函数get()_Php_Apache_Symfony_Composer Php_Silex - Fatal编程技术网

Php 对非对象(Symfony和Silex)调用成员函数get()

Php 对非对象(Symfony和Silex)调用成员函数get(),php,apache,symfony,composer-php,silex,Php,Apache,Symfony,Composer Php,Silex,我刚刚加入了一个团队,作为PHP框架,以Symphony和Silex为基础,以composer为包管理器,从事一个项目。该系统目前正在生产中使用,运行良好 那有什么问题?当我在本地运行时,应用程序失败得很惨: Fatal error: Call to a member function get() on a non-object in /Library/WebServer/wsmcrm/session.php on line 9 我做了什么 将我的apache httpd.conf重置为原始

我刚刚加入了一个团队,作为PHP框架,以Symphony和Silex为基础,以composer为包管理器,从事一个项目。该系统目前正在生产中使用,运行良好

那有什么问题?当我在本地运行时,应用程序失败得很惨:

Fatal error: Call to a member function get() on a non-object in /Library/WebServer/wsmcrm/session.php on line 9
我做了什么

  • 将我的apache httpd.conf重置为原始配置
  • 编辑httpd.conf以启用php和其他一些小调整
  • 复制回购协议(主协议)
  • 运行脚本,让composer安装composer.json文件中的所有库(现在/vendor文件夹中似乎有我需要的所有库)
  • 将DocumentRoot更改为/Library/WebServer/wsmcrm/
  • 创建了PROD数据库的本地副本
  • 更新了代码中的数据库连接,以指向我的本地数据库进行测试
  • 启动apache服务器
  • 启动mysql服务器
当我访问localhost/时,应用程序立即失败,出现上述异常。这是相当罕见的,因为问题在这一行:

<?php

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use OMG\User;

$session = $app['controllers_factory'];
/*This is line 9 */ $session->get('/', function(Silex\Application $app) {
只要本地没有存储身份验证cookie,并且/会话与此匹配:

$app->mount('/session', include 'session.php');
我只是不确定问题可能出在哪里,但我确信这与我的本地环境设置有关

有什么想法吗


这是完整的,以防你想四处看看

这似乎是会话创建的问题。如果使用数据库会话管理,请确保已创建正确的架构

如果使用文件会话,请确保在
php.ini
session.save_path
中设置的会话文件夹可从apache用户写入


但为了确保这一点,还需要检查apache错误日志。

这是因为我的本地配置有问题

最初的请求URI是“/”,这触发了apache为index.php提供服务。然而,当index重定向到“/session/*”时,apache直接为“session.php”提供服务——因此“$app”为null,而不是为index.php提供服务并让他通过框架挂载“session.php”

我必须编辑我的.htaccess并添加:

<IfModule mod_rewrite.c>
Options -MultiViews

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

选项-多视图
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
因此,所有请求都通过index.php进行处理,而不是直接为控制器提供服务

这解决了我这边的问题

这是相当奇怪的,因为控制器工厂是$app中的一个条目。能否检查$app是否为有效的Silex/应用程序实例?(正如您所说,这是一个工作代码,但仔细检查一下也无妨:-)
<IfModule mod_rewrite.c>
Options -MultiViews

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>