2017-12-27 445 views
0

我周围中搜索,找不到这一个明确的答案......扩展Laravel包

我有一个包DevDojo颤振,并想用我的应用程序来扩展它。我知道我必须重写这些函数,以便作曲家更新不会覆盖我的更改。

我该如何去做这件事?

UPDATE

public function store(Request $request) 
{ 
    $request->request->add(['body_content' => strip_tags($request->body)]); 

    $validator = Validator::make($request->all(), [ 
     'title'    => 'required|min:5|max:255', 
     'body_content'  => 'required|min:10', 
     'chatter_category_id' => 'required', 
    ]); 

    Event::fire(new ChatterBeforeNewDiscussion($request, $validator)); 
    if (function_exists('chatter_before_new_discussion')) { 
     chatter_before_new_discussion($request, $validator); 
    } 

    if ($validator->fails()) { 
     return back()->withErrors($validator)->withInput(); 
    } 

    $user_id = Auth::user()->id; 

    if (config('chatter.security.limit_time_between_posts')) { 
     if ($this->notEnoughTimeBetweenDiscussion()) { 
      $minute_copy = (config('chatter.security.time_between_posts') == 1) ? ' minute' : ' minutes'; 
      $chatter_alert = [ 
       'chatter_alert_type' => 'danger', 
       'chatter_alert'  => 'In order to prevent spam, please allow at least '.config('chatter.security.time_between_posts').$minute_copy.' in between submitting content.', 
       ]; 

      return redirect('/'.config('chatter.routes.home'))->with($chatter_alert)->withInput(); 
     } 
    } 

    // *** Let's gaurantee that we always have a generic slug *** // 
    $slug = str_slug($request->title, '-'); 

    $discussion_exists = Models::discussion()->where('slug', '=', $slug)->first(); 
    $incrementer = 1; 
    $new_slug = $slug; 
    while (isset($discussion_exists->id)) { 
     $new_slug = $slug.'-'.$incrementer; 
     $discussion_exists = Models::discussion()->where('slug', '=', $new_slug)->first(); 
     $incrementer += 1; 
    } 

    if ($slug != $new_slug) { 
     $slug = $new_slug; 
    } 

    $new_discussion = [ 
     'title'    => $request->title, 
     'chatter_category_id' => $request->chatter_category_id, 
     'user_id'    => $user_id, 
     'slug'    => $slug, 
     'color'    => $request->color, 
     ]; 

    $category = Models::category()->find($request->chatter_category_id); 
    if (!isset($category->slug)) { 
     $category = Models::category()->first(); 
    } 

    $discussion = Models::discussion()->create($new_discussion); 

    $new_post = [ 
     'chatter_discussion_id' => $discussion->id, 
     'user_id'    => $user_id, 
     'body'     => $request->body, 
     ]; 

    if (config('chatter.editor') == 'simplemde'): 
     $new_post['markdown'] = 1; 
    endif; 

    // add the user to automatically be notified when new posts are submitted 
    $discussion->users()->attach($user_id); 

    $post = Models::post()->create($new_post); 


    if ($post->id) { 
     Event::fire(new ChatterAfterNewDiscussion($request)); 
     if (function_exists('chatter_after_new_discussion')) { 
      chatter_after_new_discussion($request); 
     } 

     if($discussion->status === 1) { 
      $chatter_alert = [ 
       'chatter_alert_type' => 'success', 
       'chatter_alert'  => 'Successfully created a new '.config('chatter.titles.discussion').'.', 
      ]; 
      return redirect('/'.config('chatter.routes.home').'/'.config('chatter.routes.discussion').'/'.$category->slug.'/'.$slug)->with($chatter_alert); 
     } else { 
      $chatter_alert = [ 
       'chatter_alert_type' => 'info', 
       'chatter_alert'  => 'You post has been submitted for approval.', 
      ]; 
      return redirect()->back()->with($chatter_alert); 
     } 

    } else { 
     $chatter_alert = [ 
      'chatter_alert_type' => 'danger', 
      'chatter_alert'  => 'Whoops :(There seems to be a problem creating your '.config('chatter.titles.discussion').'.', 
      ]; 

     return redirect('/'.config('chatter.routes.home').'/'.config('chatter.routes.discussion').'/'.$category->slug.'/'.$slug)->with($chatter_alert); 
    } 
} 

有,我想修改/替代供应商包内的存储功能。如果需要,我希望能够修改某些功能或其中的一部分。请有人指出我正确的方向。

回答

0

如果你的意思修改类实现您的应用程序,你可以改变的方式类解决:

app()->bind(PackageClass:class, YourCustomClass::class); 

,现在你可以创建这个自定义类,像这样:

class YourCustomClass extends PackageClass 
{ 
    public function packageClassYouWantToChange() 
    { 
     // here you can modify behavior 
    } 
} 

我会建议你可以阅读更多关于binding

当然很多依赖于如何创建类,如果它是使用new运算符创建的,您可能需要更改多个类,但是如果它被注入,它应该足以改变这个类。

+0

这真的没有多大帮助。我试过这个,但没有奏效。 – sogeniusio