Symfony服务-->;正确用法?
首先,我第一次尝试使用服务。。。(实际上,如果s.o.能提供一个关于如何、何时以及为什么使用它的简短信息..很好;-)) 但现在谈谈我的具体情况: 我写了两个控制器: 一个用于将xlsx文件上载到服务器 一个用于将xlsx数据导入数据库 我现在要做的是将(上传的)路径从上传控制器传递到导入控制器。将导入作为服务使用是否正确 代码如下所示Symfony服务-->;正确用法?,symfony,service,controller,Symfony,Service,Controller,首先,我第一次尝试使用服务。。。(实际上,如果s.o.能提供一个关于如何、何时以及为什么使用它的简短信息..很好;-)) 但现在谈谈我的具体情况: 我写了两个控制器: 一个用于将xlsx文件上载到服务器 一个用于将xlsx数据导入数据库 我现在要做的是将(上传的)路径从上传控制器传递到导入控制器。将导入作为服务使用是否正确 代码如下所示 class FileUploadController extends Controller /** * @Route("/upload", name="upl
class FileUploadController extends Controller
/**
* @Route("/upload", name="upload")
* @Security("has_role('ROLE_ADMIN')")
*/
public function uploadAction(Request $request){
$companyid = $this->getUser()->getCompany();
if ($request->getMethod() == 'POST'){
$file = $request->files->get('xls');
$uploadedURL = '';
if(($file instanceof UploadedFile) && $file->getError()=='0'){
if(!($file->getSize()<20000)){
$originalName = $file->getClientOriginalName();
$name_array = explode('.',$originalName );
$file_type = $name_array[(sizeof($name_array)-1)];
$valid_filetypes = array('xls', 'xlsx');
if(in_array(strtolower($file_type), $valid_filetypes)){
$document = new Document();
$document->setFile($file);
$document->setSubDirectory('uploads');
$document->processFile();
$uploadedURL=$uploadedURL=$document->getUploadDirectory().DIRECTORY_SEPARATOR.$document->getSubDirectory().DIRECTORY_SEPARATOR.$file->getBasename();
}else{
echo "Wrong File Ending";
}
}else {
echo "File to big";
}
}else{
print_r('File Error');
die;;
}
$this->get("dataimport.service")->importIndexAction($uploadedURL);
}else{
return $this->render(bla)
服务.yml
services:
dataimport.service:
class: AppBundle\Controller\DataHandling\DataImportController
arguments: [@service_container]
谢谢你的帮助 在Symfony中,控制器和服务最初只是一个类。控制器的公共方法用于获取输入并生成
响应
(输出)(通过注入请求
的方式,您必须使用请求栈中的当前请求
)。服务是DI容器之外的对象,没有任何约束
由于控制器的方法必须生成并返回响应,因此从另一个控制器调用控制器通常不是一个好主意,因为您可能不需要该响应,而只需要该方法的实现
这也是您应该将可重用代码移动到服务的原因。控制器实际上只应:
- 从请求中提取数据
- 呼叫一些服务
- 使用结果呈现模板
类型
类知道输入字段的名称并将其映射到数据类。您应该只使用数据类。然后,您会得到一个很好的UploadedFile
对象来检查所有内容,但也会将检查移动到服务请看这个:。。。您是否在等待“是”或“否”之类的回答?谢谢您的回答。。。。我想说的是,有人告诉我这是否是使用服务的正确方式。。。。或者如果我完全错了。。因为我不认为如果我第一次使用它,一切都是正确的谢谢!这很有帮助!所以我怎么用它是不对的?。。您是否建议将这两个控制器合并到一个控制器中?使用服务的想法是正确的:)我编辑了我的帖子以获取更多想法。
services:
dataimport.service:
class: AppBundle\Controller\DataHandling\DataImportController
arguments: [@service_container]