2017-05-29 2 views
1

Mon noyau de contrôleur est comme cecode appelé schedular supprime les enregistrements dans la table mais ne marche pas ajouter

protected function schedule(Schedule $schedule) 
{ 
    $schedule->call('\App\Http\Controllers\[email protected]')->everyMinute(); 
} 

Quand j'appelle le contrôleur

namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use DB; 
use Illuminate\Support\Facades\Storage; 
use App\news; 
use Auth; 
use DOMDocument; 
use Exception; 

class HomeController extends Controller 
{ 
    public function automatic() 
    { 
     function delete(){ 
      DB::table('news')->delete(); 
      echo "table deletted"; 
     } 
     delete(); 
    }  
} 

Il supprime les enregistrements de la table. Mais quand j'appelle contrôleur ayant ce code

class HomeController extends Controller 
{ 
public function automatic() 
{ 
function follow_links_reportersnepal($url,$cat) 
    { 
     ini_set('max_execution_time', 9000); 
     global $already_crawled; 
     global $crawling; 
     $i=0; 
     $doc = new DOMDocument(); 
     @$doc->loadHTML(@file_get_contents($url)); 
     $linklist = $doc->getElementsByTagName("a"); 
     $already_crawled[]="sailaab"; 
     foreach ($linklist as $link) 
     { 
      try { 
       $l = $link->getAttribute("href"); 
       if(strlen($l)==45) 
       { 
        if (!in_array($l, $already_crawled)) 
        { 
        $i++; 
        if ($i>2) { 
        break; 
        } 
        $already_crawled[] = $l; 
        $content = file_get_contents($l);  
        $first_step = explode('<h3 class="display-4">' , $content); 
        $second_step = explode('</h3>' , $first_step[1]);//title 

        $third_step=explode('<div class="entry-content">',$second_step[1]); 
        $fourth_step=explode('<p>',$third_step[1]); 
        $fifth_step=explode('<div class="at-below-post', $fourth_step[1]); 

        $sixth_step=explode('<figure class="figure">', $content); 

        if(isset($sixth_step[1])){ 
         $seventh_step=explode('src="', $sixth_step[1]); 
         $eighth_step=explode('"', $seventh_step[1]); 
         $url = $eighth_step[0]; 
         $img=rand();  
         $img=(string)$img; 
         file_put_contents($img, file_get_contents($url)); 

         $user = Auth::user(); 
         news::create([ 
         'news_title'=>strip_tags($second_step[0]), 
         'category_id'=>$cat, 
         'source_id'=>'reportersnepal', 
         'reference_url'=>"www.reportersnepal.com", 
         'reference_detail'=>$l, 
         'news_summary'=>"null", 
         'news_detail'=>strip_tags($fifth_step[0]), 
         'news_image'=>$img, 
         'news_video'=>"null", 
         'news_status'=>"1", 
         'created_by'=>$user->id, 
         'last_updated_by'=>$user->id, 
         ]); 
        } 
        else{ 
         $user = Auth::user(); 
         news::create([ 
         'news_title'=>strip_tags($second_step[0]), 
         'category_id'=>$cat, 
         'source_id'=>'reportersnepal', 
         'reference_url'=>"www.reportersnepal.com", 
         'reference_detail'=>$l, 
         'news_summary'=>"null", 
         'news_detail'=>strip_tags($fifth_step[0]), 
         'news_image'=>"default.png", 
         'news_video'=>"null", 
         'news_status'=>"1", 
         'created_by'=>$user->id, 
         'last_updated_by'=>$user->id, 
         ]); 
        } 
        }     
       } 

      } catch (Exception $e) { 
       continue; 

      }   
     } 
    } 

    follow_links_reportersnepal('http://reportersnepal.com/category/featured','1'); 
} 
} 

Il n'écrit rien dans ma table de base de données. Quand je fais écho aux variables, il diffuse les données. Ce code fonctionne correctement lorsque je les appelle manuellement.

Et mon onglet Cron est

php-cli -q /home/allnewsnepal/public_html/artisan schedule:run 
+0

est-il appelé à partir de la ligne de commande? – sumit

+0

et comment planifiez-vous cela? pouvez-vous poster que – Exprator

+0

oui j'ai donné les détails. En ligne commande je l'appelle php artisan schedule: run –

Répondre

0

planificateur Laravel sont en ligne de commande et vous ne pouvez pas utiliser session et composants Auth-t-il

Votre code ci-dessous ne faites pas de sens ici

$user = Auth::user(); 

Vous devez stocker des informations utilisateur sur un autre dans la base de données de la mémoire comme redis et ensuite l'utiliser

+0

J'ai ajouté quelques détails de mon code. –

+0

Vous ne pouvez pas accéder à la session à partir de la ligne de commande, c'est uniquement basé sur un navigateur. – sumit

+0

Mais je pense que le planificateur n'appelle que le contrôleur et que le contrôleur utilise Auth. Mais quand j'ai utilisé la fonction de suppression, il supprime. Et quand j'ai les deux fonctions dans le controller (delete et follow_links_reporters_nepal) la fonction delete efface. Mais le follow_links_nepal fera écho aux données dans la variable mais n'écrit pas dans la base de données. –