我刚开始用Laravel开发Web应用程序,我有一个问题就是使用依赖注入。它在没有DI的情况下工作正常,但我想重构代码,以便代码没有紧密耦合。
我已经在google中搜索,表明命名空间之前可能存在空格并在此处搜索相关问题,但这些问题都没有解决我的问题。
的AccountController
<?php
namespace TabJut\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
use View;
use TabJut\Http\Requests;
use TabJut\Http\Controllers\Controller;
use TabJut\Repositories\AccountRepository;
class AccountController extends Controller
{
/* error culprit, If I remove these the page not error */
protected $repository;
public function __construct(AccountRepository $repository)
{
$this->repository = $repository;
}
/* error culprit */
public function getLogin()
{
return View::make('account.login');
}
public function postLogin()
{
// Validates inputs.
$rules = array(
'username' => 'required',
'password' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
// Redirects back to the form if the validator fails.
if ($validator->fails()) {
return Redirect::action('AccountController@getLogin')
->withErrors($validator)
->withInput(Input::except('password'));
}
$username = Input::get('username');
$password = Input::get('password');
$user = $repository.Authenticate($username, $password);
var_dump($user);
}
}
AccountRepository
<?php
namespace TabJut\Repositories;
use DB;
class AccountRepository
{
public function Authenticate($username, $password)
{
$user = DB::table('users')
->where('is_active', '1')
->where('user_name', $username)
->where('password', $password)
->first();
return $user;
}
}
文件夹树
错误消息
AccountRepository.php第3行中的FatalErrorException:命名空间 声明语句必须是脚本中的第一个语句
in AccountRepository.php line 3 at FatalErrorException->__construct() in HandleExceptions.php line 127 at HandleExceptions->fatalExceptionFromError() in HandleExceptions.php line 112 at HandleExceptions->handleShutdown() in HandleExceptions.php line 0 at Composer\Autoload\includeFile() in ClassLoader.php line 301
我是否错过了任何重要的配置,如服务定位器设置或只是看不见的代码错误?
请帮忙。
答案 0 :(得分:4)
它与依赖注入无关,基于kuzawinski对手册的评论,我用记事本重新创建了文件,它解决了问题。
...你仍然得到&#34;命名空间声明语句必须是 脚本中的第一个陈述&#34;致命错误,那么你可能会使用 带字节顺序标记的UTF-8编码(很好),也就是BOM(即 坏)。尝试将文件转换为&#34; UTF-8而不使用BOM&#34;,它应该 好的Comment