在一个控制器中调用另一个控制器中的del方法

我在删除经销商的时候,需要删除与经销商相关的跟进记录等,跟进记录有自己的表和控制器DistributorFollowController,里面有del方法,我想在经销商控制器DsitributorController中调用跟进记录里的del方法:
DistributorFollowController的del方法:

 public function del(Request $request){
        $id=$request->id;
        if(empty($id)){
            return self::err('跟进情况id不能空');
        }

        $follow = DistributorFollow::find($id);
        //先判断是否超过7天
        $created_at = $follow->created_at;
        $now=strtotime(Carbon::now());
        $created_at=strtotime($created_at);
        if(($now-$created_at) > 7*3600*1000){
            return self::err('超过7天不能操作');
        }
        if($follow){
            $res = $follow->delete();
            $follow->comments()->delete();
            if($res){
                return self::ok();
            }else{
                return self::err();
            }
        }
        return self::err('没有此id对应的跟进情况');

    }

我在DistributorController中是想这样调用:

 $d_follow = new DistributorFollowController($request);
 $d_follow->del(new Request());

但是需要在new DistributorFollowController的时候传入$request,del方法也需要接受$request作为参数,写到这里不知道该怎么做了。请各位指点一二

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 14

控制器里不应该写业务的 应该抽象出公共库来

3年前 评论

控制器不能相互调用 :unamused: 想要复用最简单的方法是写到model里面 或者写个公共的业务逻辑处理

3年前 评论

laravel核心思想是分层,Controller 控制器负责接收和转发请求,不进行业务处理,业务实现应该是Service服务层

3年前 评论
if($res){
     return self::ok();
}else{
       return self::err();
 }
可以简写: return $res ? self::ok() : self::err(); 
代码质量不高,还有很大的优化空间,laravel特性都没用到,楼主要好好学习
3年前 评论
ma6plus 3年前
dabour 3年前

我猜你是从TP转laravel的吧,搜索一下laravel的关联关系,应该能解决你的问题

3年前 评论

这个我知道,我有个歪门邪道。看代码:

$controller = new DistributorFollowController  ;
$request = new Request();
$request->offsetSet('a',$a);
$request->offsetSet('b',$b);

$controller->del(request);

再推荐一个合理的,也就是封装到 Service 里,

namespace App\Services;
class DsitributorService{
    static public function  del($param){
     ...
    }
}

#然后在每个 DsitributorController 和 DistributorFollowController

use App\Services\DsitributorService;

#使用的时候
$param = $request->all();
$res = DsitributorService::del($param);

3年前 评论
飞飞鱼 3年前
坐忘 (作者) 3年前
飞飞鱼 3年前
wesen 3年前

可以这样…

//这公共逻辑文件你找个自己合适的位置放
class UserShareInfo extends ControllerBase {
   //公共逻辑调用
    protected function del() {
       //.........
    }

}

你其他的两个控制器直接继承UserShareInfo 就可以了…

class DistributorFollowController extends UserShareInfo {
    public function index() {
        $result = $this->del();
        //.....
    }
}
3年前 评论
panda-sir

骚里骚气 :cry:

3年前 评论
aa24615

写个模型不就完了,调啥控制器,tp转过来的,哈哈

3年前 评论

删除直接写到模型里面,关联删除触发事件,只是拿某个模型优雅点可以不用 request 参数,


public function delete(Follow $follow){
    if ($fllow->inSevenDays()) {
       return $fllow->delete();
    }

    return reponse('超过七天不能blabla');
}

其他情况去处理异常就好了。

3年前 评论
陈先生

评论看了一遍,建议你直接了解容器创建新的资产 App::make函数存在的意义

3年前 评论
leililei

观察者(observer)模式或许可以帮助你解耦

3年前 评论
颠倒的玉石

app()-》make()??

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!