【发布时间】:2014-04-15 19:10:29
【问题描述】:
我有一个 User eloquent 模型,它在其构造函数中接收 UserMailer 类的一个实例,但我得到了这个错误
Argument 1 passed to User::__construct() must be an instance of TrainerCompare\Mailers\UserMailer, none given, called in /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 631 and defined
我理解错误,但无法弄清楚我做错了什么,但我不了解命名空间和作曲家类映射与 psr0 自动加载的关系。我记得使用 composer dump-autoload 所以不是这样的
相关文件夹结构
composer.json
app/
models/
User.php
TrainerCompare/
Mailers/
Mailer.php
UserMailer.php
Services/
Validation/
composer.json 自动加载部分。当我添加您可以在 TrainerCompare/ 中看到的验证服务时,psr-0 部分就在那里,这些类工作得很好。我按照我正在遵循的教程将 app/TrainerCompare/Mailers 添加到类映射中以加载邮件程序类
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/tests/helpers",
"app/TrainerCompare/Mailers"
],
"psr-0":{
"TrainerCompare": "app/"
}
}
用户.php
<?php
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
use TrainerCompare\Mailers\UserMailer as Mailer;
class User extends BaseModel implements UserInterface, RemindableInterface
{
protected $mailer;
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
}
Mailer.php
<?php namespace TrainerCompare\Mailers;
use Mail;
/**
* Email mailing class
*/
abstract class Mailer
{
public function __construct()
{
# code...
}
public function sendTo($user, $subject, $view, $data = [])
{
Maill::send($view, $data, function ($message) use ($user, $subject) {
$message->to($user->email)
->subject($subject);
});
}
}
UserMailer.php
<?php namespace TrainerCompare\Mailers;
use User;
/**
* User Mailer Class
*/
class UserMailer extends Mailer
{
public function __construct()
{
# code...
}
public function welcome($user)
{
$view = 'emails.users.welcome';
$data = [];
$subject = 'Welcome to Laracsts';
return $this->sendTo($user, $subject, $view, $data);
}
}
【问题讨论】:
-
你也可以发布你的 Model.php 吗?
标签: php laravel laravel-4 composer-php autoload