2017-12-27 402 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