命名空间声明语句必须是脚本中的第一个语句

时间:2015-06-24 15:13:54

标签: php laravel

我刚开始用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;
    }
}

文件夹树

Folder Tree

错误消息

  

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

我是否错过了任何重要的配置,如服务定位器设置或只是看不见的代码错误?

请帮忙。

1 个答案:

答案 0 :(得分:4)

它与依赖注入无关,基于kuzawinski对手册的评论,我用记事本重新创建了文件,它解决了问题。

  

...你仍然得到&#34;命名空间声明语句必须是   脚本中的第一个陈述&#34;致命错误,那么你可能会使用   带字节顺序标记的UTF-8编码(很好),也就是BOM(即   坏)。尝试将文件转换为&#34; UTF-8而不使用BOM&#34;,它应该   好的Comment