Php 对非对象(Symfony和Silex)调用成员函数get()
我刚刚加入了一个团队,作为PHP框架,以Symphony和Silex为基础,以composer为包管理器,从事一个项目。该系统目前正在生产中使用,运行良好 那有什么问题?当我在本地运行时,应用程序失败得很惨: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重置为原始
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服务器
<?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>