laravel phpexcel 更新中的歧义类解析
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27936911/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Ambiguous class resolution in laravel phpexcel update
提问by Deenadhayalan Manoharan
I try to update the laravel with php excel while installing i found the below warning in the composer.
我尝试在安装时使用 php excel 更新 laravel,我在 Composer 中发现了以下警告。
Error:
错误:
Warning: Ambiguous class resolution, "SettingsController" was found in both
"C:\xampp\htdocs\mti\app\controllers\SettingsController.php" and
"C:\xampp\htdocs\mti\app\controllers\SettingsControllerBackup.php", the first
will be used.Warning: Ambiguous class resolution, "ClassModel" was found in both
"C:\xampp\htdocs\mti\app\models\ClassModel.php" and "C:\xampp\htdocs\mti\
app\models\LoginModel.php", the first will be used.
SettingsController:
设置控制器:
<?php
class SettingsController extends BaseController
{
public function ChangePasswordLayout()
{
return View::make('settings/changepassword/changepassword');
}
public function ChangePasswordProcess()
{
$PasswordData = Input::all();
Validator::extend('pwdvalidation', function($field, $value, $parameters)
{
return Hash::check($value, Auth::user()->password);
});
$messages = array('pwdvalidation' => 'The Old Password is Incorrect');
$validator = Validator::make($PasswordData, User::$rulespwd, $messages);
if ($validator->passes())
{
$user = User::find(Auth::user()->id);
$user->password = Hash::make(Input::get('NewPassword'));
$user->save();
return Redirect::to('changepassword')->withInput()->with('Messages', 'The Password Information was Updated');
} else
{
return Redirect::to('changepassword')->withInput()->withErrors($validator);
}
}
public function ProfileLayout()
{
$user = Auth::user()->id;
$ProfileDetailsbyid = ProfileModel::where('id', $user)->get()->toArray();
return View::make('settings/profile/profile')->with('ProfileDetailsbyid', $ProfileDetailsbyid);
}
public function ProfileUpdateProcess($data=NULL)
{
$user = Auth::user()->id;
$ProfileDetailsbyid = ProfileModel::where('id', $user)->get()->toArray();
$ProfileData = array_filter(Input::except(array('_token')));
$validation = Validator::make($ProfileData, ProfileModel::$rules);
if ($validation->passes())
{
if(!empty($ProfileData['Photo']))
{
Input::file('Photo')->move('assets/uploads/profilephoto/', $user . '-Photo.' . Input::file('Photo')->getClientOriginalName());
$Photo=$user.'-Photo.' . Input::file('Photo')->getClientOriginalName();
unset($ProfileData['Photo']);
$ProfileData['Photo']=$Photo;
}
$affectedRows = ProfileModel::where('id', $user)->update($ProfileData);
//VehicleModel::create($VehicleData);
return Redirect::to('profile')->with('Message', 'Profile Details Update Succesfully')->with('ProfileDetailsbyid', $ProfileDetailsbyid);
} else
{
return Redirect::to('profile')->withInput()->withErrors($validation->messages())->with('ProfileDetailsbyid', $ProfileDetailsbyid);
}
}
}
ClassModel:
类模型:
<?php
class ClassModel extends Eloquent
{
protected $primaryKey = 'AutoID';
protected $created_at = 'CreatedAt';
protected $updated_at = 'UpdatedAt';
protected $table = 'class';
protected $guarded = array('GradeName');
protected $fillable = array('GradeName');
public function batch(){
return $this->hasMany('BatchModel', 'Class');
}
public function studentadmissionresult(){
return $this->hasMany('StudentAdmissionModel', 'StudentCourse');
}
public $timestamps = true;
public static $rules = array(
'GradeName' => array('required', 'unique:class','regex:/^./'),
'GradeSection' => 'required',
'GradeCode' => array('required', 'unique:class')
);
public static $updaterules = array(
'GradeName' => array('required','regex:/^./'),
'GradeSection' => 'required',
'GradeCode' => array('required')
);
}
I following this tutorial:
我遵循本教程:
https://github.com/Maatwebsite/Laravel-Excel
https://github.com/Maatwebsite/Laravel-Excel
I have try following command :
我尝试了以下命令:
composer require maatwebsite/excel": "~1.2.1
回答by lukasgeiter
This actually has nothing to do with the package you are installing.
这实际上与您正在安装的软件包无关。
Explanation
解释
When recreating the autoload files (composer dump-autoload
) after the update Composer detected that you have two classes with the exact same name (but in different files).
在composer dump-autoload
更新后重新创建自动加载文件 ( ) 时 Composer 检测到您有两个具有完全相同名称的类(但位于不同的文件中)。
Class SettingsController
in SettingsController.php
and SettingsControllerBackup.php
类SettingsController
中SettingsController.php
和SettingsControllerBackup.php
and class ClassModel
in ClassModel.php
and LoginModel.php
和类ClassModel
中ClassModel.php
和LoginModel.php
Composer will then choose to use one of the two (I'm not sure how it makes that decision, it's probably just the first one it finds) and will ignore the other occurrence.
然后 Composer 将选择使用两者之一(我不确定它是如何做出这个决定的,它可能只是它找到的第一个)并且会忽略另一个事件。
Solutions
解决方案
- Delete the files if you don't need them
- Rename the class
- 如果您不需要文件,请删除它们
- 重命名类
A good and common practice is to name the class like the file. This is a simple way to avoid such collisions because two files in the same directory can't have the same name.
一个好的和常见的做法是像文件一样命名类。这是避免此类冲突的简单方法,因为同一目录中的两个文件不能具有相同的名称。