- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Swift_Message 发送邮件,但是当我去发送数据时它不会发送并且我收到错误
FatalErrorException: Error: Call to a member function get() on a non-object in /vagrant/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php line 252
这是我正在使用的电子邮件 Controller 。
use Symfony\Component\Finder\Shell\Command;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\DependencyInjection\ContainerInterface;
class EmailController extends Controller{
public function createMessage($subject, $from, $from_name, $to, $to_name, $body){
// Create the message
$message = \Swift_Message::newInstance()
// Give the message a subject
->setSubject($subject)
// Set the From address with an associative array
->setFrom(array($from => $from_name))
// Set the To addresses with an associative array
->setTo(array($to => $to_name))
// Give it a body
->setBody($body, 'text/html');
return $message;
}
public function sendEmail($message, $urlAlias){
$this->get('mailer')->send($message);
return $this->redirect($this->generateUrl($urlAlias));
}
}
我知道它无法访问我认为是容器类一部分的对象,但我似乎可以将其拉起。我试过使用 $this->container->get(...
但这也行不通。我错过了什么。这似乎应该是非常简单的。
我正在使用调用当前 Controller 的操作从不同的包调用此函数。我不知道这是否有所作为。
好的,所以在查看/vagrant/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php 时
它出错的行是
/**
* Gets a service by id.
*
* @param string $id The service id
*
* @return object The service
*/
public function get($id)
{
return $this->container->get($id);
}
}
这让我觉得自己像个“ postman ;不是一个好的 $id 但它被用在 Symfony 的例子和许多其他私有(private)例子中。
不知道这是否有帮助,但认为值得一提。
这可能是因为我的 config.yml 文件中的 swiftmailer: 设置?
路由.yml文件
fuel_form_homepage:
pattern: /hello/{name}
defaults: { _controller: FuelFormBundle:Default:index }
referral_form:
pattern: /form/referral/{hash}
defaults: { _controller: FuelFormBundle:Form:referralForm }
referral_result:
pattern: /form/referral/result
defaults: { _controller: FuelFormBundle:Form:referralResult }
user_form:
pattern: /form/user
defaults: { _controller: FuelFormBundle:Form:userForm }
home:
pattern: /
defaults: { _controller: FuelFormBundle:Default:home}
这是调用的函数
public function userFormAction(request $request){
$user = new User();
$form = $this->createForm('user', $user);
$form->handleRequest($request);
if($form->isValid()){
$user->setTimeCreated();
$user->setTimeUpdated();
$date = $user->getTimeCreated();
$timestamp = $date->format("U");
$hash = $user->getFirstName() . $user->getLastName() . $timestamp ;
$user->setUserHash(md5($hash));
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
print_r($user);
//TODO: @Email: @Body: make sure to replace with correct information.
//Calls a service named email_bundle_controller
$emailController = $this->get('email_bundle_controller');
$fullName = $user->getFirstName() . $user->getLastName();
$body = "please visit the following url to start referring! <a href='http://localhost:8080/app_dev.php/form/referral/" . $user->getUserHash() . "'>Your URL</a>";
$message = $emailController->createMessage('Welcome to Fuel PRM References', 'bsaverino@gmail.com', 'Brad Saverino', $user->getEmail(), $fullName, $body);
$emailController->sendEmail($message, 'user_form');
}
return $this->render('FuelFormBundle:Default:mainForm.html.twig', array('form' => $form->createView(),));
}
这是允许我调用另一个包的服务。
services:
fuel_form.form.type.referral:
class: Fuel\FormBundle\Form\Type\ReferralType
tags:
- { name: form.type, alias: referral}
fuel_form.form.type.user:
class: Fuel\FormBundle\Form\Type\UserType
tags:
- { name: form.type, alias: user}
email_bundle_controller:
class: Fuel\EmailBundle\Controller\EmailController
这是 FuelEmailBundle.php
namespace Fuel\EmailBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use \Symfony\Component\DependencyInjection\ContainerInterface;
class FuelEmailBundle extends Bundle
{
private static $containerInstance = null;
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
self::$containerInstance = $container;
}
public static function getContainer()
{
return self::$containerInstance;
}
}
这些是对 sendEmail 函数所做的更改
public function sendEmail($message, $urlAlias){
$container = FuelEmailBundle::getContainer();
$mailer = $container->get('mailer');
$mailer->send($message);
return $this->redirect($this->generateUrl($urlAlias));
}
最佳答案
正如 Cerad 上面提到的,您收到错误消息是因为未设置容器。解决此问题的一种方法是将容器实例传递给您的包,以便您可以从项目中的任何位置调用该容器。
编辑与您的包 (BundleName.php) 对应的类,以包含两个方法 setContainer 和 getContainer。请参见下面的示例。
namespace Venom\CoreBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use \Symfony\Component\DependencyInjection\ContainerInterface;
class VenomCoreBundle extends Bundle
{
private static $containerInstance = null;
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
self::$containerInstance = $container;
}
public static function getContainer()
{
return self::$containerInstance;
}
}
使用适当的命名空间。然后,在需要容器的类中使用包的 namespace 。您可以通过以下方式调用容器
$container = VenomCoreBundle::getContainer();
然后,调用邮件程序
$mailer = $container->get('mailer');
关于php - 错误 : Call to a member function get() on a non-object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991865/
我们有一个包含重复用户记录的数据库,我需要根据几个因素选择“最佳”用户: 应先选择具有成员(member)资格的用户,然后再选择没有成员(member)资格的用户 成员(member)有级别,在所有条
不知道为什么 Visual Studio 发出此警告: Access of shared member, constant member, enum member or nested type thr
我有一个数据库设置来注册网站的成员(member)专用区域的成员(member)。我可以使用复选框回显所有注册成员,以便我可以选择从管理页面删除单个成员,但我似乎无法弄清楚如何在单击提交按钮时选择删除
假定前缀一元运算符可以“由不带参数的非静态成员函数或带一个参数的非成员函数实现”(§13.5.1[over.unary]/1),除了适用于任何成员/非成员函数选择的通常封装/代码重用设计原理之外,还有
拥有 struct Person { string name; }; Person* p = ... 假设没有运算符被重载。 哪个更有效(如果有的话)? (*p).name 对比 p->name
进程文件: members-area or members-area.exe 进程名称: 5-1-61-96 进程类别:存在安全风险的进程 英文描述: 
引用资料 http://msdn.microsoft.com/en-us/library/6tc47t75%28v=VS.80%29.aspx http://msdn.microsoft.com/en
这个问题在这里已经有了答案: Is there any reason to use this-> (16 个答案) 关闭 7 年前。 这有什么区别: int MyClass::getId() {
我正在制作一个网站,您需要在其中注册,然后创建一个角色来玩。我如何将注册页面中使用的表格与玩家的表格结合起来,以便玩家始终获得他创建的角色。 我有一个表members,用于存储注册用户以及角色的 ta
我处于困境中,我被委托(delegate)创建一个 PHP Web 应用程序,该应用程序允许一个人注册,然后该用户可以再注册 5 个其他用户,他注册的其他用户也可以每个注册 5 个成员。 我希望创建数
我试图在成员(member)页面上显示一个非常简单的用户名。我已经在 stackoverflow 上搜索过,但使用我发现的内容不起作用。 我使用 HTML 表单指南中非常常见的注册/登录脚本,该脚本使
我正在使用CodeIgniter,我的问题是关于MySQL查询。我有两个表,分别是成员和关系。 成员表 我正在做的是,根据member_type将所有用户添加到成员表中。如果 member_type
我有一个表,用于存储 2 个成员(成员 A 和成员 B)之间的聊天信息。现在,当成员 A 删除他的消息时,我会抛出这样的 sql 请求 $deleting = mysqli_query($connec
from bs4 import BeautifulSoup import requests r = requests.get('http://medicalassociation.in/doctor-
我有两个我无法修改的类,它们都具有完全相同的成员: class Pose1 { public: double x,y; }; class Pose2 { public: d
我正在测试服务器上运行机器人。当前 channel 中有 3 个成员(member_count of 3),但它只返回一个成员。该成员是机器人。 代码: import discord from dis
我有一个对象,我们称之为 o,以及对 o 的引用。 在o范围内,我设置了一个成员,我们称之为m。 所以在 o 中,我调用: o.m = "blah" 在 o 之外,我访问 m: console.log
我正在尝试实现自定义成员(member)资格提供程序并希望更改 GetUser 方法。问题是 GetUser 返回 MembershipUser,而我想返回 MyMembershipUser,它有两个
我的网站有一个推荐给 friend 的按钮。为了鼓励人们使用此功能,我想用积分奖励那些使用它的人(积分将兑换奖品......还不知道)。 好的,所以我有这样的结构: 表单.php 您可以在此处输入 f
我在 MySQL 中有三个表, 组(键:group_id) 成员(键:member_id) group_member_relations 键:group_id, member_id 最后一个表包含 m
我是一名优秀的程序员,十分优秀!